Skip to content

19.3 命令行cl编译时指定SDK版本

https://scz.617.cn/windows/202307101154.txt

Q:

Visual Studio 2019装了多个SDK,命令行cl编译时,如何知道用了哪个版本SDK?

A: scz 2023-07-10

一般来说,Visual Studio装有多个SDK时,命令行cl编译时,默认使用最高版本SDK。

cl some.c /Bv /showIncludes

这将输出取头文件的目录,从中可以看到SDK版本,比如

C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.29.30133\bin\HostX64\x64\cl.exe: Version 19.29.30151.0 C:\Program Files (x86)\Windows Kits\10\Include\10.0.22000.0\um\winternl.h

据此可知cl用了"Windows 11 SDK (10.0.22000.0)"。

上述办法并非正道,打开"x64 Native Tools Command Prompt for VS 2019",会设 置很多环境变量,比如

$ set | findstr /I version

VCToolsVersion=14.29.30133 VisualStudioVersion=16.0 WindowsSDKLibVersion=10.0.22000.0\ WindowsSDKVersion=10.0.22000.0\

Q:

命令行cl编译时,如何指定所用SDK版本?

A:

理论上最直白的办法是指定去哪儿找头文件、库文件

cl some.c /I "C:\Program Files (x86)\Windows Kits\10\Include\10.0.19041.0" /link /LIBPATH:"C:\Program Files (x86)\Windows Kits\10\Lib\10.0.19041.0"

但此法需要指定的目录太多,可操作性差。上面只是示例,实际需要精确到各级子目 录,否则还是会用最高版本SDK目录。

正确的办法是

cd /d "C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Auxiliary\Build" vcvarsall.bat [architecture] [platform_type] [winsdk_version] [-vcvars_ver=vcversion] [spectre_mode] vcvarsall.bat x64 10.0.19041.0 -vcvars_ver=14.29