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