使用vscode创建cmake项目
·
1.源文件
1.src/main.cpp
#include <iostream>
int main() {
std::cout << "Hello, World!" << std::endl;
return 0;
}
2.CMakeLists.txt
cmake_minimum_required(VERSION 3.16)
project(cmake-demo VERSION 1.0.0 LANGUAGES CXX)
# C++ 标准设置
set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
set(CMAKE_CXX_EXTENSIONS OFF)
# 可执行文件
add_executable(${PROJECT_NAME}
src/main.cpp
)
2.初步测试
配置好CMakeLists.txt之后可以使用cmake插件执行一遍以确保cmake无误
- 点击快捷键Ctrl+Shift+P,输入CMake:Select a kit,选择你想要的编译器

- 点击快捷键Ctrl+Shift+P,输入CMake:Configure

- 点击快捷键Ctrl+Shift+P,输入CMake:Build
或者点击左下角的Build按键

- 点击左下角的执行


- 先在代码上打断点,然后点击左下角的调试

进入调试后可以看到Debug Console有输出stdout,Call Stack可以看到调用栈

3.创建Preset
1.创建Configure Preset
-
点击快捷键Ctrl+Shift+P,输入CMake:Add Configure Preset
-
选择Create from Compilers

-
选择编译器

-
输出configure的名字

-
可以看到CMakePresets.json已经被生成了

-
但还需要做一些修改
- 降低版本为6
- 删除install
- 由于gcc,g++已经在环境变量中,因此可以删除绝对路径,也可以删除.exe后缀
- 指定make工具,由于我已经安装了mingw,因此mingw的bin目录下有了mingw32-make.exe,当然为了方便使用,也可以将mingw32-make.exe改名为make.exe
{
"version": 6,
"configurePresets": [
{
"name": "mingw",
"displayName": "GCC 9.2.0 mingw32",
"description": "Using compilers: gcc, g++",
"generator": "MinGW Makefiles",
"binaryDir": "${sourceDir}/build/${presetName}",
"cacheVariables": {
"CMAKE_C_COMPILER": "gcc",
"CMAKE_CXX_COMPILER": "g++",
"CMAKE_MAKE_PROGRAM": "mingw32-make",
"CMAKE_BUILD_TYPE": "Debug"
}
}
]
}
- .vscode/settings.json
注意args的–preset参数值必须与CMakePresets.json配置的configure preset的name对应
{
"version": "2.0.0",
"tasks": [
{
"label": "CMake: configure (mingw)",
"type": "shell",
"command": "cmake",
"args": [
"--preset",
"mingw"
],
"options": {
"cwd": "${workspaceFolder}"
},
"problemMatcher": []
}
]
}
- 执行task
CMake: configure (mingw)
点击Ctrl+Shift+P,输入Tasks: Run Task,选择CMake: configure (mingw),看到如下输出,说明configure成功

2.创建Build Preset
- CMakePresets.json
添加这一段到CMakePresets.json,注意逗号和json格式
"buildPresets": [
{
"name": "mingwbuild",
"displayName": "Build with MinGW",
"description": "Build the project using the mingw configure preset.",
"configurePreset": "mingw"
}
]
- .vscode/settings.json
添加这一段到.vscode/settings.json,注意逗号和json格式
- 注意args的–preset参数值必须与CMakePresets.json配置的build preset的name对应
- 注意dependsOn的值必须与tasks.json里配置的configure的task的name对应
{
"label": "CMake: build (mingw build)",
"type": "shell",
"command": "cmake",
"args": [
"--build",
"--preset",
"mingwbuild"
],
"options": {
"cwd": "${workspaceFolder}"
},
"dependsOn": [
"CMake: configure (mingw)"
],
"problemMatcher": [
"$gcc"
]
}
- 执行task
CMake: configure (mingw)
点击Ctrl+Shift+P,输入Tasks: Run Task,选择CMake: build (mingw build),看到如下输出,说明build成功

4.创建调试
1 .vscode/launch.json
- 注意program的路径必须与CMakePresets.json配置的configure的binaryDir的路径匹配,且文件名必须与CMakeLists.txt配置的add_executable的可执行程序名匹配
{
"version": "0.2.0",
"configurations": [
{
"name": "Debug cmake-demo (MinGW)",
"type": "cppdbg",
"request": "launch",
"program": "${workspaceFolder}/build/mingw/cmake-demo",
"args": [],
"stopAtEntry": false,
"cwd": "${workspaceFolder}",
"environment": [],
"externalConsole": false,
"MIMode": "gdb",
"miDebuggerPath": "gdb",
"preLaunchTask": "CMake: build (mingw build)",
"setupCommands": [
{
"description": "Enable pretty-printing for gdb",
"text": "-enable-pretty-printing",
"ignoreFailures": true
}
]
}
]
}
2.执行调试
在源文件上打断点,然后Run And Debug界面的下拉框中找到Debug cmake-demo (MinGW)
然后点击执行

打开Debug Console控制台看到输出,说明调试成功

5.配置多个编译器
- 使用clang用于编译,使用ninja作为make工具
- llvm下载地址llvm release
- ninja 下载地址ninja release,下载后解压,将ninja.exe放到环境变量的PATH路径中
1.CMakePresets.json
- 新增一个configure preset
{
"name": "ninja-clang",
"displayName": "Ninja with clang++",
"generator": "Ninja",
"binaryDir": "${sourceDir}/build/${presetName}",
"cacheVariables": {
"CMAKE_CXX_COMPILER": "clang++",
"CMAKE_C_COMPILER": "clang",
"CMAKE_MAKE_PROGRAM": "ninja",
"CMAKE_BUILD_TYPE": "Debug"
}
}
- 新增一个build preset
{
"name": "clangbuild",
"displayName": "Build with Ninja/Clang",
"description": "Build the project using the ninja-clang configure preset.",
"configurePreset": "ninja-clang"
}
2 .vscode/tasks.json
- 新增一个configure的task
{
"label": "CMake: configure (ninja-clang)",
"type": "shell",
"command": "cmake",
"args": [
"--preset",
"ninja-clang"
],
"options": {
"cwd": "${workspaceFolder}"
},
"problemMatcher": []
}
- 新增一个build的task
{
"label": "CMake: build (clang build)",
"type": "shell",
"command": "cmake",
"args": [
"--build",
"--preset",
"clangbuild"
],
"options": {
"cwd": "${workspaceFolder}"
},
"dependsOn": [
"CMake: configure (ninja-clang)"
],
"problemMatcher": [
"$gcc"
]
}
3 .vscode/launch.json
{
"name": "Debug cmake-demo (Ninja/Clang)",
"type": "cppvsdbg",
"request": "launch",
"program": "${workspaceFolder}/build/ninja-clang/cmake-demo",
"args": [],
"stopAtEntry": true,
"cwd": "${workspaceFolder}",
"environment": [],
"externalConsole": false,
"preLaunchTask": "CMake: build (clang build)"
}
6.最终的文件如下
1.src/main.cpp
#include <iostream>
int main() {
std::cout << "Hello, World!" << std::endl;
return 0;
}
2.CMakeLists.txt
cmake_minimum_required(VERSION 3.16)
project(cmake-demo VERSION 1.0.0 LANGUAGES CXX)
# C++ 标准设置
set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
set(CMAKE_CXX_EXTENSIONS OFF)
# 可执行文件
add_executable(${PROJECT_NAME}
src/main.cpp
)
3.CMakePresets.json
{
"version": 6,
"configurePresets": [
{
"name": "mingw",
"displayName": "GCC 9.2.0 mingw32",
"description": "Using compilers: gcc, g++",
"generator": "MinGW Makefiles",
"binaryDir": "${sourceDir}/build/${presetName}",
"cacheVariables": {
"CMAKE_C_COMPILER": "gcc",
"CMAKE_CXX_COMPILER": "g++",
"CMAKE_MAKE_PROGRAM": "mingw32-make",
"CMAKE_BUILD_TYPE": "Debug"
}
},
{
"name": "ninja-clang",
"displayName": "Ninja with clang++",
"generator": "Ninja",
"binaryDir": "${sourceDir}/build/${presetName}",
"cacheVariables": {
"CMAKE_CXX_COMPILER": "clang++",
"CMAKE_C_COMPILER": "clang",
"CMAKE_MAKE_PROGRAM": "ninja",
"CMAKE_BUILD_TYPE": "Debug"
}
}
],
"buildPresets": [
{
"name": "mingwbuild",
"displayName": "Build with MinGW",
"description": "Build the project using the mingw configure preset.",
"configurePreset": "mingw"
},
{
"name": "clangbuild",
"displayName": "Build with Ninja/Clang",
"description": "Build the project using the ninja-clang configure preset.",
"configurePreset": "ninja-clang"
}
]
}
4 .vscode/tasks.json
{
"version": "2.0.0",
"tasks": [
{
"label": "CMake: configure (mingw)",
"type": "shell",
"command": "cmake",
"args": [
"--preset",
"mingw"
],
"options": {
"cwd": "${workspaceFolder}"
},
"problemMatcher": []
},
{
"label": "CMake: build (mingw build)",
"type": "shell",
"command": "cmake",
"args": [
"--build",
"--preset",
"mingwbuild"
],
"options": {
"cwd": "${workspaceFolder}"
},
"dependsOn": [
"CMake: configure (mingw)"
],
"problemMatcher": [
"$gcc"
]
},
{
"label": "CMake: configure (ninja-clang)",
"type": "shell",
"command": "cmake",
"args": [
"--preset",
"ninja-clang"
],
"options": {
"cwd": "${workspaceFolder}"
},
"problemMatcher": []
},
{
"label": "CMake: build (clang build)",
"type": "shell",
"command": "cmake",
"args": [
"--build",
"--preset",
"clangbuild"
],
"options": {
"cwd": "${workspaceFolder}"
},
"dependsOn": [
"CMake: configure (ninja-clang)"
],
"problemMatcher": [
"$gcc"
]
}
]
}
5 .vscode/launch.json
{
"version": "0.2.0",
"configurations": [
{
"name": "Debug cmake-demo (MinGW)",
"type": "cppdbg",
"request": "launch",
"program": "${workspaceFolder}/build/mingw/cmake-demo",
"args": [],
"stopAtEntry": false,
"cwd": "${workspaceFolder}",
"environment": [],
"externalConsole": false,
"MIMode": "gdb",
"miDebuggerPath": "gdb",
"preLaunchTask": "CMake: build (mingw build)",
"setupCommands": [
{
"description": "Enable pretty-printing for gdb",
"text": "-enable-pretty-printing",
"ignoreFailures": true
}
]
},
{
"name": "Debug cmake-demo (Ninja/Clang)",
"type": "cppvsdbg",
"request": "launch",
"program": "${workspaceFolder}/build/ninja-clang/cmake-demo",
"args": [],
"stopAtEntry": true,
"cwd": "${workspaceFolder}",
"environment": [],
"externalConsole": false,
"preLaunchTask": "CMake: build (clang build)"
}
]
}
更多推荐

所有评论(0)