Windows下VS2019使用CMake预设将x64改为x86_64后构建失败
问题原因
- 首先是CMake Preset配置值不合法:针对MSVC编译工具链,
architecture.value字段的合法取值只有x86、x64、arm、arm64四个,不存在x86_64这个标识——x86_64是GCC/Linux生态常用的64位x86架构命名,VS自带的CMake工具链无法识别。 - 两个场景的环境初始化逻辑差异导致表现不同:
- 你在独立CMD中能构建成功,是因为当前CMD已经提前初始化了x64位MSVC编译环境(比如通过x64原生工具命令提示符打开、或提前执行过
vcvarsall.bat x64),加上配置中architecture.strategy设为external,CMake本身不会校验architecture值的合法性,直接复用当前已有的环境变量完成构建,非法值被直接忽略。 - VS2019内置的CMake功能不会提前继承全局开发者环境,它会读取
architecture.value的值,自动调用对应架构的vcvars脚本初始化编译环境。遇到无法识别的x86_64值时,它会错误回退到x86编译工具链,且环境初始化流程没有正确把32位工具链对应的rc.exe、mt.exe路径加入PATH,最终出现编译器测试失败、找不到文件的报错,从报错日志里的/machine:X86链接参数、HostX64/x86/cl.exe编译器路径也能佐证它错误加载了32位目标环境。
- 你在独立CMD中能构建成功,是因为当前CMD已经提前初始化了x64位MSVC编译环境(比如通过x64原生工具命令提示符打开、或提前执行过
解决方法
直接把architecture.value字段的值改回x64即可,这就是MSVC工具链下64位x86架构的正确配置值,修改后VS内置CMake会自动匹配HostX64/x64的编译器、正确初始化64位编译环境,即可正常构建。
内容的提问来源于stack exchange,提问作者naichuans
相关产品推荐
相关产品推荐

