使用CLion进行C++开发

举报
enali 发表于 2020/04/10 17:35:47 2020/04/10
【摘要】 简介 CLion是Jetbrains推出的面向跨平台开发的C/C++集成开发环境。作为团队的主力开发工具,其最大的优势是支持在Windows平台进行远程的Linux环境开发。一方面,CLion支持实时的代码增量上传,另一方面,支持远程环境的编译、运行和调试。0 新建项目打开菜单栏File->New Project,建议至少选择C++11,这块还取决于编译器支持的最高版本。1 编译配置1...

简介

    CLionJetbrains推出的面向跨平台开发的C/C++集成开发环境。作为团队的主力开发工具,其最大的优势是支持在Windows平台进行远程的Linux环境开发。一方面,CLion支持实时的代码增量上传,另一方面,支持远程环境的编译、运行和调试。

0 新建项目

打开菜单栏File->New Project,建议至少选择C++11,这块还取决于编译器支持的最高版本

1 编译配置

1.1 配置工具链toolchain

打开菜单File->Settings,定位如下图:

配置工具链.png

当前CLion支持五种工具链:

  •  Visual Studio, 目前应该是不支持2019的, 如果安装之前版本的话, 会自动检测到

  •  MinGW, 是一个GCCWindows移植版, 在一般情况下是可以代替在远程主机开发的, 但是并不推荐, 可能有兼容性问题

  •  WSL, 是Windows推出的Linux子系统, 目前的WSL1.0版本是基于底层代码翻译, 可能存在跟MinGW一样的兼容性问题

  •  Cygwin, 是开源界推出的在Windows运行Linux命令的工具, 跟WSL1.0相似.

  •  Remote Host, 直接使用远程Linux主机的编译工具链,

通常,在Windows10环境下都可以开启WSL子系统,日常开发使用WSL即可。但考虑到三方库的兼容性,考虑到docker容器构建,考虑到本地机器的性能,团队最终选择Remote Host。

选择远程开发时,需要配置如下的代码部署。

1.2 配置代码部署Deployment

代码部署是指把本地代码上传到远程开发机,通常采用SFTP协议。打开菜单File->Settings,定位如下图:

通常,选择并配置完Remote Host的工具链后,代码部署会自动配置好。此外,有一些额外的技巧:

  • 如果不在Mappings中配置好代码上传目录,则会默认创建并上传到/tmp下的一个随机目录。

  • 可以在Excluded Path中配置不想上传到远程开发机的目录。

  • 为避免手动上传代码,可以勾选菜单栏Tools->Deployment->Automatic Upload,CLion会在代码有修改后,自动上传相应文件。

1.3 配置构建类型CMake

CLion支持最好的构建工具是CMake,这也是C++构建中最广泛使用的工具。打开菜单File->Settings,定位如下图

CMake默认支持4种构建类型,其在背后应用不同的编译选项。第1个为项目采用的默认构建类型。通常,开发阶段多使用Debug,发布阶段多使用Release。

2 代码运行

2.1 CMake项目载入

在CMake相关的构建配置文件已编写无误后,确保CMake项目载入解析成功。通常,若出现代码无补完提示,往往是CMake项目解析失败。

[Finished]表示载入成功。这里也可以查看到远程开发机上的代码上传目录和代码构建目录。

CLion会解析CMake构建配置里面的所有目标Target,并把这些目标做为可运行程序。

2.2 代码运行

有两种方式的代码运行:

  1. 在右上角的工具栏处,直接选择构建类型和目标。3为运行4为调试

如果程序的执行需要比较复杂的配置,如参数、工作目录、环境变量等,则需要通过菜单Run->Edit Configurations选择指定目录,并进行相关配置:

说明:

  • 工作目录指定的是本地的目录,CLion会自动映射到远程开发机的相应目录

  • 环境变量不会使用远程开发机上已配置的环境变量,或者在这里指定key/value,或者在本地机上设置环境变量,CLion会读取

    2.  打开包含main函数的源码文件,在main函数内右击选择运行或调试

远程程序需要复杂配置时,需要采用第一种。这种方式默认的无参数可直接运行。

3 代码调试

    需要说明的是,只有在Debug构建类型下,源码和编译后的程序才会一一对应,在调试时可以步进执行程序。在其他模式下,通常都会执行代码优化,源码与生成的二进制码将不再是一一对应。

3.1 下断点

单击下断点,在断点上右击也设置条件断点。

3.2 调试

同代码运行类似,调试也有两种方式,这里不再赘述。

说明:1为中断调试;2为调试过程中的输出;3为调试控制操作,如步进步入等;4为表达式计算;5查看变量,但当前对C++类型支持不友好,如string类型不能直接看到值;6为GDB调试窗口,可直接使用GDB指令。

4 额外配置

4.1 打开远程终端

打开菜单Tools->Start SSH session,选择配置的远程开发机。

考虑到远程Linux开发机的默认编码为UTF-8,而本地的Windows机多为GBK,可能导致输出信息乱码。可设置如下:

4.2 设置字符集编码

为避免乱码问题,尽量设定UTF-8编码,在所有的文本编辑器和开发工具中。

4.3 设定换行符

Linux环境下,换行符默认\n,不同于Windows平台的\r\n。如果用于远程Linux环境开发,建议设置为\n。

4.4 删除行尾空格

5 F&Q

5.1 代码修改后,程序运行的不是最新的代码

    原因分析:可能是代码未上传到开发机,也可能是开发机在编译代码时未增量编译

    解决方案:

    1. 确保最新代码已上传到远程开发机,或者在状态栏的File Transfer中查看最新的上传活动,或者在菜单栏Tools->Deployment->Upload to XX来手动上传

    2. 确保程序是最新代码编译的结果。CLion只是下发编译指令到开发机,具体的编译过程是否有编译最新代码并不确定。可以把开发机上cmake-build-xxx构建目录中的缓存全部删除后再构建。通常,这个问题是由开发机的时间与本地机器不同步造成的。也就是说,make本身的增量编译依赖文件的更新时间。

5.2 本地切换分支后,CMake无法解析或程序编译失败

    原因分析:在本地切换Git分支后,不一定会触发代码上传操作。另外,代码上传可能只是上传新添加的文件,若文件在本地删除,则可能还存在开发机上。

    解决方案:删除开发机上的代码,进行全量代码上传。

5.3 在开发机安装了新的三方库后,CLion提示找不到头文件

    原因分析:CLion在本地做代码提示的原理是,下载开发机的相应头文件目录中的内容到本地并做解析。这个问题的根源在于,新的头文件没有被下载到本地并解析。

    解决方案:打开菜单:Tools->Resync Remote Host

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

举报
请填写举报理由
0/200