在VSCode用CMake编译C++程序的方法

在VSCode用CMake编译C/C++程序的方法

想找一款能自定义编译工具链(甚至后续会有跨平台的需求),用CMake构建的C/C++开发IDE,看了半天市面上主流的C/C++ IDE也不多,试过Qt Creator、eclipse CDT、Visual Studio 2022还有之前用的Dev-C++都不满意(CLion没试过但估计肯定可以),最终选择了VSCode配置一个编译工具链和CMake进行C/C++开发。具体方法如下。

首先下载编译工具链CMake是必要前提了,编译工具链是一个压缩包解压出来是文件夹,里面的\bin目录下的gcc.exe和g++.exe程序是可以直接命令行操作编译C/C++程序的(但一般开发不会用太麻烦,都是配置进IDE里调用),下载好后要将\bin目录配置进环境变量里,这里用的是MinGW-w64,CMake也是一个.exe的工具软件,要下载安装包安装然后将.exe配置进环境变量,如果打开命令行用“--version”检查都有正常的打印信息说明环境变量配置好,后面VSCode的“自动检测工具链”就是基于这个原理的,只要“--version”命令行没问题一般就不会有问题。

MinGW-w64下载官网 https://github.com/niXman/mingw-builds-binaries/releases
CMake下载官网 https://cmake.org/

然后在VSCode下载C/C++的配套插件,一般VSCode检测到C/C++文件就会推荐你把这些插件装好,且安装很快不用连外网,主要有以下5个,如下图,实际本次开发本质需要的是CMake Tools等工具,后面操作感觉前面4个工具都没用上,编译程序只要有编译工具链、CMake和VSCode这个CMake Tools插件接口即可,但是不可否认可能在编程C/C++代码编辑的其它地方可能暗中用到。

image

然后打开VSCode,新建一个空的文件夹,默认已经写好main.cpp模板和CMakeLists.txt配置,越简单越好,如下

# main.cpp

#include <iostream>

int main()
{
  int a = 10;
  int b = 15;

  std::cout << a << "+" << b << "= " << (a + b) << std::endl;

  return 0;
}

# CMakeLists.txt

cmake_minimum_required(VERSION 3.10)

project(VS_Test)

# 静态编译 (不用.dll库点击.exe就能运行)
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -static")

add_executable(${PROJECT_NAME} main.cpp)

关键是VSCode里的操作,当初准备好了这些条件不熟VSCode整半天,发现其实几步就搞好了,首先要在本工程文件夹搞到CMakePresets.json这个文件,这是VSCode用CMake编译运行C/C++程序的核心配置文件,和工程文件夹目录同级,里面配置了如“调用电脑哪里的编译工具链”“生成编译缓存路径在哪”这些开发C/C++程序时特别关注的配置,但是它可以自动生成,自定义修改,如下图。

image

自动生成这个文件的方法如下,最新版的VSCode是点Ctrl+Shift+P,在搜索框中输入CMake Quick Start,然后VSCode会在该搜索框提示一步步操作,下一步“Add a New Preset...”直接回车,下一步选择“Create from Compilers”(如果工程文件夹中有.cpp文件和CMakeLists.txt的话会这样开始,如果没有它会提示从头开始创建工程后面也是这样),下一步选择VSCode检测到的本地的编译工具链(如图),即可自动生成CMakePresets.json

image

然后就可以在VSCode界面底部栏的左侧直接点击编译运行程序了(有些不显眼),CMake编译C/C++程序的机制是这样,首先要“build”用CMake构建一遍生成CMake缓存(在CMakePresets.json指定生成文件夹),然后再“Run Build”真正编译C/C++的.exe程序,最后这步通常会直接运行.exe程序看到效果,以下的齿轮键就是编译CMake的,播放键就是CMake编译生成.exe的。

image

完成后工程文件夹如下,可以比较简洁。

image

直接纠结的地方在于,刚安装VSCode专用的C/C++插件就能配置出c_cpp_properties.jsontask.json这些指定本地编译工具链且链接到VSCode界面按键点击编译的配置文件,但是这样只能一个个文件编译,不能一个文件夹多个文件编译,换用CMake后(虽然是同一批次推荐下载的插件)要用的配置文件却完全相互独立,刚开始配置在.vscode子文件夹中的配置选项,包括setting.json、c_cpp_properties.json、task.json可以全删了不影响CMake编译运行,CMake用到CMakePresets.json这个配置文件就够了。

还有总结其实用VSCode开发C/C++程序的环境配置部分还是挺快的,尤其是它这么流行、自动化程序较高且直观简洁(除去我纠结的过程实际操作用不了多少时间)。一些专门的IDE会显得体积大和可自定义配置差如QtCreator和Visual Studio 2022 (比如我想用个冷门的工具链开发Linux的C/C++就很麻烦),eclipse C++能自定义工具链但CMake配置很复杂(和CMake对接地不是特别好),且网上资源较少,甚至它的官网文档都难找到,感觉这应该是最主流的方法,自己之前从QtCreator这种大集成IDE研究起所以才发现。

posted @ 2026-06-20 16:50  XIE_CON  阅读(34)  评论(0)    收藏  举报