IDE如何选择
IDE的概念是集成开发环境(Integrated Development Environment)
所谓集成就是集中了编译配置、编译、调试等功能,例如Xcode、Android Studio、CLion等
方便开发者专注于代码逻、快速实现功能或者减少指令输入
不过随着集成开发环境加入了越来越多的东西,变得越来越卡,现在也出现了简化的趋势,例如VSCode的流行
CLion如何工作
使用 CLion 创建一个 “New Project —— C++ Executable” 的工程,可以发现其根目录为
1 | ----Project |
对应该系列的第一篇文章HelloWorld可以发现 CLion也是使用CMake来组织工程
点击菜单栏 “Run” 存在 “Build、Run、Debug” 三个选项,指定一个断点,然后点击Debug就可以进行调试
操作工程你会发现以下几个重点
- “cmake .” 产生的一系列文件被放在了 cmake-build-debug
- 在根本的任何改动,都会使得CMakeLists.txt变化,并且刷新工程
- 和Xcode不一样,CLion没有模糊编译、运行、调试的概念
- CLion中 Build不会执行程序、Run的话断点不会停止、Debug才是Xcode的 Command+R
由于CLion 变的越来越卡了(2018年6月——2019年9月),导致很多人选择使用更加轻量级的VSCode来开发
VSCode的配置、编译、调试
VSCode就对程序员的专业程度要求比较高了,下载官方的C/C++插件之后
根据官方教程可以完成配置、编译、调试三个步骤
命令台(Command Palette)和命令行(Shell Command)工具code
命令台有两种打开方法
- 点击菜单栏 “View —— Command Palette”
- 使用组合键 Shift + Command + P
打开 “Command Palette” 可以执行 “Shell command: Install ‘code’ command in PATH” 来安装code指令
code指令把一个空文件夹配置成C/C++工程的基本命令,在完成配置后存在三个文件,目录结构如下
1 | ----HelloWorld |
文件名 | 作用 | 英文原文 |
---|---|---|
c_cpp_properties.json | 工程配置文件,让这个目录拥有基本的Workspace、Project的能力 | (compiler path and IntelliSense settings) |
tasks.json | 编译文件,指定使用哪种目录编译 | (build instructions) |
launch.json | 调试文件,指定调试哪个程序,调试前提是编译结果是Debug配置 | (debugger settings) |
工程配置文件 c_cpp_properties.json
打开 “Command Palette” 执行以下任意一个指令来配置基本的Workspace或Project的能力
- “C/C++: Edit Configurations (UI)” 可以使用可视化界面配置
- “C/C++: Edit Configurations (JSON)” 可以使用JSON文件配置
注意如上篇文章所陈述,工程和编译的概念很模糊,不同平台和语言的定义不完全一致,所以职责划分并不是绝对的
如果采用可视化界面配置,最终生效的还是 “.vscode/c_cpp_properties.json” 文件
1 | //这个文件是不能加注释的,不然VSCode会报解析失败,这里加注释只是为了讲解 |
编译任务文件 tasks.json
打开 “Command Palette” 执行 “Tasks: Configure Default Build Task”
然后选择“Create tasks.json file from template —— Others” 来配置默认的编译任务 “.vscode/tasks.json”
编译的配置就没有UI界面了(怀疑是懒得做),为了体现VSCode的高自由度(对新人不友好)
这里举例了官方文档的配置示例、CMake的HelloWorld、模仿CLion指令三种配置,说明了不同指令之间的关系
命令 | 作用 | 参考配置 |
---|---|---|
clang | 编译文件,最基本的指令 | 官方的配置示例 |
cmake & make | cmake完成配置,make进行调度clang | CMake的HelloWorld |
clang | cmake进行配置,cmake调用make使用clang进行编译 | CLion |
其中CLion的作法才是比较成熟的作法,这里仅仅是举例整个演进的过程
官方配置示例(不重要)
官方配置是使用最基本的clang指令,完成文件编译
1 | //这个文件是不能加注释的,不然VSCode会报解析失败,这里加注释只是为了讲解 |
CMake和Make指令分别使用 (不重要)
当文件结构足够多以及目录结构十分复杂的情况的时候,使用一条clang编译指令的参数就过于复杂
可以使用make文件来调度clang,可以参考 CMake配置完成后的 CMakeFiles/HelloWorld.dir/build.make 文件
1 | { |
文件中使用的指令是 XcodeDefault.xctoolchain/usr/bin/c++ ,使用man之后可以看到是clang的一个别名指令
1 | CMakeFiles/HelloWorld.dir/main.cpp.o: ../main.cpp |
CLion的CMake流程(成熟工程的作法)
由于CMake本身就是对make的包装,那么可以把make指令本身也对大家隐藏起来,只使用cmake
例如CLion 就是仅使用 cmake 组织工程,可以分为配置和编译两步
配置过程在 New Project的过程中已经完成,我们没有抓到日志但是可以模拟出来
1 | { |
而在编译阶段可以看到编译指令
1 | "~/Library/Application Support/JetBrains/Toolbox/apps/CLion/ch-0/192.6262.62/CLion.app/Contents/bin/cmake/mac/bin/cmake" --build ~/Desktop/HelloWorld/cmake-build-debug --target main -- -j 2 |
我们在VSCode中使用Task来模拟,配置如下
1 | { |
调试启动文件 launch.json
打开 “Command Palette” 执行 “Debug: Open launch.json”
选择 “C++(GDB/LLDB)” 就是生成文件 “.vscode/launch.json” 可以用来调试采用Debug编译的可执行程序
1 | //这个文件是不能加注释的,不然VSCode会报解析失败,这里加注释只是为了讲解 |
结语
在对配置、编译、调试的整个流程熟悉了之后,如果选择 “VSCode + CMake” 进行开发可以总结为以下流程图
1 | +--------------------------------------------------------------------------+ |