除了之前的使用 VSCode 插件来编译工程外,我们也可以使用配置文件来编译cmake工程,主要依赖 launch.json 和 tasks.json 文件。
目录
一、下载编译器
1、下载 Windows GCC
2、选择编译器路径
二、配置 debug 环境
1、配置 lauch.json 文件
2、配置 tasks.json 文件
三、编译工程
1、测试工程结构
2、开始编译
一、下载编译器
1、下载 Windows GCC
这里是在Windows环境下,所以下载的是 Windows 环境使用的 gcc 编译器。
下载地址: MinGW-w64 - for 32 and 64 bit Windows - Browse Files at SourceForge.net
下载完毕后解压,并将 bin 目录添加到环境变量。bin 目录下有几个比较重要的执行文件
2、选择编译器路径
将 bin 目录添加到环境变量后,Ctrl + Shift + P 通过 UI 选择编译器路径
二、配置 debug 环境
配置文件 launch.json 和 tasks.json 都在 .vscode 目录下。其他目录可暂时不理会。
1、配置 lauch.json 文件
主要参数说明:
- program: 可执行文件的完整路径。这里的执行文件名必须和cmake生成的执行文件名一致
- miDebuggerPath: 调试器的完整路径。(即便添加了环境变量也需要填入完整路径)
- preLaunchTask:调试前要做的操作,会去tasks.json 文件中找对应的标签。cmake工程在调试之前一般需要 cmake .. ,然后再 make 生成执行文件
{
"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 中
}
]
}
2、配置 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" // 表示执行上述操作时的工作目录
},
}
三、编译工程
1、测试工程结构
因为是使用配置文件配置,需要在 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 <iostream>
int main(void)
{
printf("hello world \n");
return 0;
}
2、开始编译
点击 Start Debugging 或者按 F5 就可以开始编译了。
第一次编译会报错,因为一开始 build 目录为空,cmake 还未执行完,make 操作就已经先运行了,所以会出现找不到 Makefile 的问题。
F5 再次编译,这个时候不出意外的话就会编译通过了
参考文章:
04-vscode搭建cmake的编译环境_vscode配置cmake编译-CSDN博客