# Qt Creator无法检测到VS2019/2022中安装的旧版工具链 VS2019/2022改变了安装机制。如果需要同时使用多个版本的编译器,可以方便地从Visual Studio Installer中,仅安装旧版编译器的工具链,不需要再安装旧版的整个Visual Studio。 大概是从VS2019的后面几个版本开始,还是从2022开始,同时改变了工具链的安装机制。新版本中,无论安装了多少个2017版本以后的工具链(2015存疑),均只出现一个用于规整编译环境的`vcvarsall.bat`文件,而不像之前那样每个版本一个`vcvarsall.bat`,要调用那个版本自己去找对应的`vcvarsall.bat`文件。 到底方便不方便另说,但这个东西给Qt Creator带来了麻烦,就是某些版本的Qt Creator在这种情况下只能检测到最新的一般版本的编译器——因为他是以`vcvarsall.bat`为单位进行检测的,而新架构的`vcvarsall.bat`则通过传递不同的参数来区分编译器,不认参数则是最新。 ``` C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Auxiliary\Build> .\vcvarsall.bat -h [ERROR:vcvarsall.bat] Invalid argument found : -h [ERROR:vcvarsall.bat] Error in script usage. The correct usage is: Syntax: vcvarsall.bat [arch] [platform_type] [winsdk_version] [-vcvars_ver=vc_version] [-vcvars_spectre_libs=spectre_mode] where : [arch]: x86 | amd64 | x86_amd64 | x86_arm | x86_arm64 | amd64_x86 | amd64_arm | amd64_arm64 [platform_type]: {empty} | store | uwp [winsdk_version] : full Windows 10 SDK number (e.g. 10.0.10240.0) or "8.1" to use the Windows 8.1 SDK. [vc_version] : {none} for latest installed VC++ compiler toolset | "14.0" for VC++ 2015 Compiler Toolset | "14.xx" for the latest 14.xx.yyyyy toolset installed (e.g. "14.11") | "14.xx.yyyyy" for a specific full version number (e.g. "14.11.25503") [spectre_mode] : {none} for libraries without spectre mitigations | "spectre" for libraries with spectre mitigations The store parameter sets environment variables to support Universal Windows Platform application development and is an alias for 'uwp'. For example: vcvarsall.bat x86_amd64 vcvarsall.bat x86_amd64 10.0.10240.0 vcvarsall.bat x86_arm uwp 10.0.10240.0 vcvarsall.bat x86_arm onecore 10.0.10240.0 -vcvars_ver=14.0 vcvarsall.bat x64 8.1 vcvarsall.bat x64 store 8.1 Please make sure either Visual Studio or C++ Build SKU is installed. ``` 所以,这时候想在QtCreator里面使用这些旧版工具链的话,就必须要手动添加,并且要附加参数(可以从上面自动检测到的新版编译器的配置项下面“克隆”): {{ :coding:cpp:qt-detect-compiler.png?direct&800 |}} 其实就是在克隆来的配置项后面的空格中,添加一个选项:`-vcvars_ver=14.29`(`14.29`更改为你安装的版本号)。 也算是更清楚地了解了vc背后的机制吧。