CMakePresets.json是跨平台构建中枢,需置于项目根目录并显式指定binaryDir、固定Ninja生成器、用cacheVariables设CMAKE_PREFIX_PATH;Kit须按编译器组合分离且存于用户目录;compile_commands.json须由CMake生成并配置c_cpp.configurationProvider为cmake-tools。
configurePresets.json 是跨平台构建的中枢
VSCode 里点“Configure”按钮就失败,或者不同系统上构建行为不一致,大概率是因为还在靠手动传
参数或改
。CMake 3.21+ 原生支持的
才是解法——它把构建逻辑从编辑器配置里剥离出来,变成项目级声明式配置。
关键点:
必须放在项目根目录,VSCode 的 CMake Tools 插件会自动识别
每个
要显式指定
,避免 Windows/macOS/Linux 下路径拼接出错(比如别用
,统一用
)
跨平台时,
推荐固定为
(比 Make 更一致,Windows 上也无需 MSVC 命令行环境)
如果项目依赖第三方库(如
或
),在
里加
,而不是靠
猜路径
Kit 配置必须和 preset 解耦
Kit 不是“选个编译器就完事”,它是 CMake Tools 用来定位工具链的元信息。很多人把
和
都塞进一个 Kit,结果 configure 时 CMake 报
—— 因为 Kit 只能绑定一套
/
编译器路径。
正确做法:
立即学习
“
C++免费学习笔记(深入)
”;
每个 Kit 对应一个明确的编译器组合,例如:
和
Kit 文件(
)建议放在用户目录(
),而非项目内,避免污染
在
的
中通过
字段引用 Kit 名称,而不是靠状态栏手动切换 —— 这样才能保证 CI 和本地行为一致
Windows 上若用 MSVC,Kit 名称里必须含
或
,否则插件不会自动注入
环境
compile_commands.json 必须由 CMake 生成,不能手写
头文件跳转失效、
报红、IntelliSense 提示“未定义标识符”,90% 是因为 C/C++ 插件还在读过时的
。VSCode 的 C/C++ 插件默认不理解 CMake 的
或
结果。
C函数速查手册(CHM版)
C函数速查手册(CHM版)
下载
强制让它对齐真实构建配置:
在
开头(
后)加
确保
中的
没禁用该选项(默认开启)
VSCode 设置中搜索
,值设为
(不是
)
首次配置后执行命令面板里的
,否则缓存不刷新
toolchain file 和 kit 不可混用
想交叉编译 ARM Linux 或裸机固件?别指望选个 “ARM GCC” Kit 就能自动生效。Kit 描述的是“本机上可用的编译器”,而 toolchain file 才是告诉 CMake “我要为另一个系统生成代码”。
典型错误场景:
在
里写了
,但没配
→ CMake 仍按 host 系统生成二进制
写了
却没在对应 Kit 中指定
→ configure 阶段找不到
正确组合:
先确保
在 PATH 中或 Kit 的
显式指向它
在
的
中加字段:
toolchain file 内必须包含
或
,否则 CMake 不进入交叉编译模式
最易被忽略的一点:toolchain file 里的路径必须用正斜杠
,即使在 Windows 上写
也会被 CMake Tools 解析失败 —— 统一写成
或更好是
。
-Dsettings.jsonCMakePresets.jsonCMakePresets.jsonconfigurePresetbinaryDir${sourceDir}\build${sourceDir}/build/${presetName}generatorNinjafmtOpenCVcacheVariablesCMAKE_PREFIX_PATHfind_package()gcc-12clang-15No CMAKE_CXX_COMPILERCCXX"name": "GCC 12.2 (x86_64)""name": "Clang 15 (arm64)"cmake-tools-kits.json~/.vscode/cmake-tools-kits.jsonCMakePresets.jsonconfigurePresetkitVisual StudioMSVCvcvarsall.bat#includec_cpp_properties.jsontarget_include_directories()find_package()CMakeLists.txtproject()set(CMAKE_EXPORT_COMPILE_COMMANDS ON)CMakePresets.jsonconfigurePresetc_cpp.configurationProviderms-vscode.cmake-toolsDefaultC/C++: Reset IntelliSense DatabaseCMakePresets.json"kit": "ARM GCC 10.2"toolchainFiletoolchainFilecompilersarm-none-eabi-gccarm-none-eabi-gcccompilers.CXXCMakePresets.jsonconfigurePreset"toolchainFile": "${sourceDir}/cmake/arm-gcc-toolchain.cmake"set(CMAKE_SYSTEM_NAME Generic)set(CMAKE_SYSTEM_NAME Linux)/C:/sdk/arm-gcc/C:/sdk/arm-gcc/${sourceDir}/toolchains/arm-gcc.cmake