如何在Visual Studio 2019中使用自定义CMake版本进行Ninja构建?
解决VS2019中Ninja生成器无法使用自定义CMake版本的问题
当然可以在VS2019里搭配Ninja和自定义CMake版本完成构建,我之前也碰到过一模一样的情况——用Visual Studio生成器时自定义CMake正常,但切到Ninja就自动回退到集成版本。核心问题是VS2019对Ninja生成器的CMake路径优先级处理有特殊逻辑,需要你在配置里显式针对Ninja配置指定自定义CMake路径,而不是只依赖全局设置。
下面是具体的解决步骤:
1. 正确配置CMakeSettings.json
打开项目根目录下的CMakeSettings.json,确保你为每个使用Ninja的配置项单独指定cmakeExecutable路径,而不是只在全局或者其他生成器的配置里设置。示例配置如下:
{ "configurations": [ { "name": "Debug_Ninja", "generator": "Ninja", // 替换成你系统中自定义CMake的绝对路径 "cmakeExecutable": "C:/Program Files/CMake/bin/cmake.exe", "configurationType": "Debug", "buildRoot": "${projectDir}\\out\\build\\${name}", "installRoot": "${projectDir}\\out\\install\\${name}", "cmakeCommandArgs": "", "buildCommandArgs": "", "ctestCommandArgs": "" }, { "name": "Release_Ninja", "generator": "Ninja", "cmakeExecutable": "C:/Program Files/CMake/bin/cmake.exe", "configurationType": "Release", "buildRoot": "${projectDir}\\out\\build\\${name}", "installRoot": "${projectDir}\\out\\install\\${name}", "cmakeCommandArgs": "", "buildCommandArgs": "", "ctestCommandArgs": "" } ] }
2. 检查VS的CMake全局设置
打开VS2019的「工具」→「选项」→「CMake」→「常规」,确保勾选了**「使用CMakeSettings.json中的CMake路径」**,这个选项会让VS优先使用你配置文件里指定的CMake,而不是强制用集成版本。
3. 清理旧构建缓存并重新生成
之前用集成CMake生成的缓存会干扰新配置,所以需要:
- 手动删除
buildRoot指定的目录(比如示例里的out/build/Debug_Ninja) - 在VS的CMake菜单里选择「删除缓存并重新配置」
4. 验证配置是否生效
触发构建后,查看VS的「输出」窗口(切换到CMake输出频道),如果看到类似下面的日志,说明自定义CMake已经生效:
Using CMake executable: C:/Program Files/CMake/bin/cmake.exe
如果还是有问题,可以检查自定义CMake的路径是否正确(确保是绝对路径,没有拼写错误),或者尝试以管理员身份运行VS2019,避免权限问题导致无法读取自定义CMake。
内容的提问来源于stack exchange,提问作者marcks




