如何安装可被CMake实际调用的多版本MSBuild并配合使用
解决CMake调用多版本MSBuild的问题
我来帮你搞定这个问题——你遇到的核心症结是:仅仅安装MSVC工具集(140/141/142)还不够,CMake需要对应版本的MSBuild以及完整的Visual Studio Build Tools组件才能正确调用旧版本的生成器。下面是分步骤的解决方案:
1. 安装对应版本的Visual Studio Build Tools
CMake要调用旧版本的MSBuild(比如对应VS2015/2017/2019的14.0/15.x/16.x),必须安装对应版本的Visual Studio Build Tools,而不是只单独安装MSVC工具集:
- 针对MSVC 140(VS2015):安装Visual Studio 2015 Build Tools,一定要勾选「C++ Build Tools」组件,它包含了MSBuild 14.0和配套的编译工具链。
- 针对MSVC 141(VS2017):安装Visual Studio 2017 Build Tools,勾选「Desktop development with C++」工作负载,这个负载会自动包含MSBuild 15.x和所需的全部工具。
- 针对MSVC 142(VS2019):安装Visual Studio 2019 Build Tools,同样勾选「Desktop development with C++」工作负载,获取MSBuild 16.x及配套环境。
划重点:安装时别只选单独的MSVC工具集,必须选完整的工作负载/组件,否则CMake找不到对应的MSBuild和环境变量配置。
2. 让CMake正确识别对应版本的MSBuild
安装完成后,有几种可靠的方式让CMake定位到目标版本的MSBuild:
- 使用对应版本的Visual Studio命令提示符:打开你需要的版本的「x64 Native Tools Command Prompt」(比如VS2017的),这个提示符会自动配置好所有相关环境变量(包括MSBuild路径、VC工具集路径等),然后在这个窗口里运行CMake,指定匹配的生成器即可,例如:
cmake -G "Visual Studio 15 2017" .. - 手动指定MSBuild路径:如果你不想用命令提示符,可以在CMake命令里通过
-DCMAKE_MAKE_PROGRAM参数直接指定对应版本的MSBuild.exe路径,比如:cmake -G "Visual Studio 15 2017" -DCMAKE_MAKE_PROGRAM="C:\Program Files (x86)\Microsoft Visual Studio\2017\BuildTools\MSBuild\15.0\Bin\MSBuild.exe" .. - 检查系统环境变量:确保对应版本的MSBuild路径被添加到系统
PATH中,正常安装Build Tools后,安装程序会自动注册注册表信息,CMake通常能通过注册表找到这些信息,但如果有问题可以手动添加路径。
3. 验证配置是否生效
如果还是有问题,可以用CMake的--debug-find参数查看它查找MSBuild和工具集的详细过程,帮你定位哪里出了问题:
cmake -G "Visual Studio 15 2017" --debug-find ..
另外要注意:生成器和MSBuild版本是严格对应的,千万别混用:
- Visual Studio 14 2015 → MSBuild 14.0
- Visual Studio 15 2017 → MSBuild 15.x
- Visual Studio 16 2019 → MSBuild 16.x
- Visual Studio 17 2022 → MSBuild 17.x
内容的提问来源于stack exchange,提问作者IjonTichy




