1.源文件1.src/main.cpp#includeiostreamintmain(){std::coutHello, World!std::endl;return0;}2.CMakeLists.txtcmake_minimum_required(VERSION3.16)project(cmake-demo VERSION1.0.0LANGUAGES CXX)#C标准设置set(CMAKE_CXX_STANDARD17)set(CMAKE_CXX_STANDARD_REQUIRED ON)set(CMAKE_CXX_EXTENSIONS OFF)# 可执行文件add_executable(${PROJECT_NAME}src/main.cpp)2.初步测试配置好CMakeLists.txt之后可以使用cmake插件执行一遍以确保cmake无误点击快捷键CtrlShiftP输入CMake:Select a kit选择你想要的编译器点击快捷键CtrlShiftP输入CMake:Configure点击快捷键CtrlShiftP输入CMake:Build或者点击左下角的Build按键点击左下角的执行先在代码上打断点然后点击左下角的调试进入调试后可以看到Debug Console有输出stdoutCall Stack可以看到调用栈3.创建Preset1.创建Configure Preset点击快捷键CtrlShiftP输入CMake:Add Configure Preset选择Create from Compilers选择编译器输出configure的名字可以看到CMakePresets.json已经被生成了但还需要做一些修改降低版本为6删除install由于gccg已经在环境变量中因此可以删除绝对路径也可以删除.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:[]}]}执行taskCMake: configure (mingw)点击CtrlShiftP输入Tasks: Run Task选择CMake: configure (mingw)看到如下输出说明configure成功2.创建Build PresetCMakePresets.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]}执行taskCMake: configure (mingw)点击CtrlShiftP输入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 releaseninja 下载地址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#includeiostreamintmain(){std::coutHello, World!std::endl;return0;}2.CMakeLists.txtcmake_minimum_required(VERSION3.16)project(cmake-demo VERSION1.0.0LANGUAGES CXX)#C标准设置set(CMAKE_CXX_STANDARD17)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)}]}