除了之前的使用 VSCode 插件来编译工程外,我们也可以使用配置文件来编译cmake工程,主要依赖 launch.json 和 tasks.json 文件。
目录
这里是在Windows环境下,所以下载的是 Windows 环境使用的 gcc 编译器。
下载地址: MinGW-w64 - for 32 and 64 bit Windows - Browse Files at SourceForge.net
下载完毕后解压,并将 bin 目录添加到环境变量。bin 目录下有几个比较重要的执行文件
将 bin 目录添加到环境变量后,Ctrl + Shift + P 通过 UI 选择编译器路径
配置文件 launch.json 和 tasks.json 都在 .vscode 目录下。其他目录可暂时不理会。
主要参数说明:
- {
- "version": "0.2.0",
- "configurations": [
- {
- "name": "C/C++ Runner: Debug Session", // 配置名称(调试时会在下拉菜单中显示)
- "type": "cppdbg",
- "request": "launch",
- "program": "${workspaceFolder}/build/testProj.exe", // 执行文件的完整路径(这里的执行文件名必须和cmake生成的执行文件名一致)
- "args": [], // 执行文件运行时,传递给执行文件的命令行参数
- "stopAtEntry": false, // 一般设为false,设为true时会将程序暂停在程序入口
- "externalConsole": true, // 一般设为true,表示调试时显示控制台
- "cwd": "${workspaceFolder}", // 调试程序的工作目录,一般为 ${workspaceFolder} 即代码所在目录
- "MIMode": "gdb",
- "miDebuggerPath": "D:/Download/Windows GCC/x86_64-7.3.0-release-win32-sjlj-rt_v5-rev0/mingw64/bin/gdb.exe", // 使用的调试器的全路径
- "setupCommands": [
- {
- "description": "Enable pretty-printing for gdb",
- "text": "-enable-pretty-printing",
- "ignoreFailures": true
- }
- ],
- "preLaunchTask": "build", // 表示调试前要做的操作,这里的build只是一个标签,标签内容在 tasks.json 中
- }
- ]
- }
这里注意 -G MinGW Makefiles,如果不加这个选项,默认会按照 Visual Studio 的标准进行编译,生成的文件如下:
很显然这并不是我们期望的,我希望生成的是 Makefile 文件,因此这里需要加上 -G MinGW Makefiles 选项,生成 mingw32-make 能够编译的Makefile。生成的文件如下:
- {
- "tasks": [
- {
- "label": "build", // build 操作
- "dependsOn":[
- "cmake", // build 操作依赖于 cmake 和 make 操作
- "make"
- ]
- },
- {
- "label": "cmake", // cmake 操作
- "type":"shell",
- "command":"cmake", // 执行 cmake 操作所使用的命令
- "args": [ // cmake 命令执行时的命令行参数
- "-G MinGW Makefiles", // 生成 mingw32-make 能够编译的Makefile
- "../"
- ],
- },
- {
- "label": "make", // make 操作
- "command":"mingw32-make.exe", // 执行 make 操作所使用的命令(mingw32-make.exe已经添加了环境变量)
- "args": [
- ],
- "options": {
- "cwd": "${workspaceFolder}/build" // 表示执行当前操作的工作目录
- }
- },
- ],
- "version": "2.0.0",
- "options": {
- "cwd": "${workspaceFolder}/build" // 表示执行上述操作时的工作目录
- },
- }
因为是使用配置文件配置,需要在 CMakeLists.txt 的同级目录下创建一个 build 目录
CMakeLists.txt
- cmake_minimum_required(VERSION 3.15.0)
- project(testProj)
-
- file(GLOB ALL_SOURCES *.cpp *.h)
-
- add_executable(${PROJECT_NAME} ${ALL_SOURCES})
main.cpp
- #include
-
- int main(void)
- {
- printf("hello world \n");
- return 0;
- }
点击 Start Debugging 或者按 F5 就可以开始编译了。
第一次编译会报错,因为一开始 build 目录为空,cmake 还未执行完,make 操作就已经先运行了,所以会出现找不到 Makefile 的问题。
F5 再次编译,这个时候不出意外的话就会编译通过了
参考文章: