使用CLion进行C++开发
简介
CLion是Jetbrains推出的面向跨平台开发的C/C++集成开发环境。作为团队的主力开发工具,其最大的优势是支持在Windows平台进行远程的Linux环境开发。一方面,CLion支持实时的代码增量上传,另一方面,支持远程环境的编译、运行和调试。
0 新建项目
打开菜单栏File->New Project,建议至少选择C++11,这块还取决于编译器支持的最高版本。
1 编译配置
1.1 配置工具链toolchain
打开菜单File->Settings,定位如下图:
当前CLion支持五种工具链:
Visual Studio, 目前应该是不支持2019的, 如果安装之前版本的话, 会自动检测到
MinGW, 是一个GCC的Windows移植版, 在一般情况下是可以代替在远程主机开发的, 但是并不推荐, 可能有兼容性问题
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 代码运行
有两种方式的代码运行:
在右上角的工具栏处,直接选择构建类型和目标。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 代码修改后,程序运行的不是最新的代码
原因分析:可能是代码未上传到开发机,也可能是开发机在编译代码时未增量编译
解决方案:
确保最新代码已上传到远程开发机,或者在状态栏的File Transfer中查看最新的上传活动,或者在菜单栏Tools->Deployment->Upload to XX来手动上传
确保程序是最新代码编译的结果。CLion只是下发编译指令到开发机,具体的编译过程是否有编译最新代码并不确定。可以把开发机上cmake-build-xxx构建目录中的缓存全部删除后再构建。通常,这个问题是由开发机的时间与本地机器不同步造成的。也就是说,make本身的增量编译依赖文件的更新时间。
5.2 本地切换分支后,CMake无法解析或程序编译失败
原因分析:在本地切换Git分支后,不一定会触发代码上传操作。另外,代码上传可能只是上传新添加的文件,若文件在本地删除,则可能还存在开发机上。
解决方案:删除开发机上的代码,进行全量代码上传。
5.3 在开发机安装了新的三方库后,CLion提示找不到头文件
原因分析:CLion在本地做代码提示的原理是,下载开发机的相应头文件目录中的内容到本地并做解析。这个问题的根源在于,新的头文件没有被下载到本地并解析。
解决方案:打开菜单:Tools->Resync Remote Host
- 点赞
- 收藏
- 关注作者
评论(0)