在命令行传递形如-T host=x64,version=14.32.17.2的命令行,
或者在首次执行Configure时,
在图形界面最下面的Optional Toolset文本框(那里标注了这是传递给-T)中填入形如host=x64,version=14.32.17.2的选项,
并且在下面的四个单选框中选中“specific native compilers”。
在命令行中传递形如-DCMAKE_SYSTEM_VERSION:STRING=10.0.22000.0的参数,或者在图形界面中,第一次Configure之前设置CMAKE_SYSTEM_VERSION为10.0.22000.0。
如果想要在CMakeLists.txt中写死这一参数,对应的设置语句需要出现在第一个project之前。
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.