使用 CMake/MSVC 时指定工具链版本
指定工具链版本
在命令行传递形如-T host=x64,version=14.32.17.2
的命令行, 或者在首次执行Configure
时, 在图形界面最下面的Optional Toolset
文本框(那里标注了这是传递给-T
)中填入形如host=x64,version=14.32.17.2
的选项, 并且在下面的四个单选框中选中“specific native compilers”。
指定 Windows SDK 版本
在命令行中传递形如-DCMAKE_SYSTEM_VERSION:STRING=10.0.22000.0
的参数,或者在图形界面中,第一次Configure
之前设置CMAKE_SYSTEM_VERSION
为10.0.22000.0
。
如果想要在CMakeLists.txt
中写死这一参数,对应的设置语句需要出现在第一个project
之前。
如果是 ninja
ninja 体系在生成 make 文件这一步是不指定编译器的骂我甚至怀疑不安装编译器也能完成cmake -G "Ninja Multi-Config"
这一步。
要让 ninja 使用特定的工具链,必须在调用 ninja 前提前在命令行设置好各种环境变量,这一步是Visual Studio自带的vcvarsall.bat
脚本完成的。
(在旧版本中有对应于每一套工具链的独立bat文件,但是自Visual Studio 19开始貌似就只有这一个了。)
一般的使用,需要先开一个cmd窗口,使用类似如下的参数执行vcvarsall.bat
,然后再在这个窗口中执行 ninja 命令。
"%VCINSTALLDIR%\vcvarsall.bat" x64 10.0.22000.0 -vcvars_ver=14.32.17.2
为了方便调用,我想了一个变通办法:新建一个独立的bat
,在其中首先调用vcvarsall.bat
,再启动cmake
或者ninja
, 子进程将自动继承所有的环境变量。
@echo off
set VSLANG=1033
set VCINSTALLDIR=C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Auxiliary\Build\
call "%VCINSTALLDIR%\vcvarsall.bat" x64 10.0.22000.0 -vcvars_ver=14.32.17.2 > NUL
call C:\devlibs\apps\build-tools\ninja.exe(或者cmake.exe) %*
然后,在调用他俩或者设置vscode一类的工具的时候,用这个bat文件代替cmake.exe
或者ninja.exe
.