通往Visual Studio的vcvars64.bat的可靠路径

时间:2020-06-15 11:58:46

标签: visual-studio visual-c++ visual-studio-2017

VisualStudio具有vcvars64.bat,可加载所有必需的环境变量以从命令行编译Visual Studio项目。

例如在VisualStudio 2017社区版中,此文件位于

C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Auxiliary\Build\vcvars64.bat

如何仅使用系统设置的环境变量,而与安装的Visual Studio版本无关,如何在批处理脚本中构造此文件的路径?

1 个答案:

答案 0 :(得分:2)

您可以使用vswhere来检测Visual Studio相关文件的安装位置。 wiki中的这段代码非常接近您的需求:

for /f "usebackq delims=" %%i in (`vswhere.exe -prerelease -latest -property installationPath`) do (
  if exist "%%i\Common7\Tools\vsdevcmd.bat" (
    %comspec% /k "%%i\Common7\Tools\vsdevcmd.bat" %*
    exit /b
  )
)

rem Instance or command prompt not found
exit /b 2

更改该片段以调用vcvar应该很容易。

如果您有多个Visual Studio安装程序可能未安装C ++工作负载,则可以搜索具有特定工作负载或组件的实例,例如这样的实例,将Team Explorer纳入安装范围:

vswhere -latest -products * -requires Microsoft.VisualStudio.TeamExplorer -property installationPath

Microsoft C ++团队写了a blog about vswhere and alternative options。他们还列出了所有相关的工作负载和组件标识符。

这个想法是,您将vswhere.exe与脚本或可执行文件一起提供。或按需降低价格。我在一些地方使用了该powershell片段,以便在需要时使用vswhere:

$vswhereLatest = "https://github.com/Microsoft/vswhere/releases/latest/download/vswhere.exe"
$vswherePath = ".\vswhere.exe"
remove-item $vswherePath
invoke-webrequest $vswhereLatest -OutFile $vswherePath

其背后的原因是,您现在可以安装同一Visual Studio版本的多个实例。每个设置都将其设置存储在专用注册表文件中。没有简单的方法可以访问曾经存在的InstallPath注册表项。 More background can be found here。完成一些reg.exe命令,以加载私有注册表hyves并对其进行查询。如果您确实无法按需打包或获取vswhere,这可能是您唯一的选择(添加16.*以包括2019)

for /d %%f in (%LOCALAPPDATA%\Microsoft\VisualStudio\15.0_*) do reg load HKLM\_TMPVS_%%~nxf "%%f\privateregistry.bin"

REM Use `reg query` to grab the InstallPath from the instance

for /d %%f in (%LOCALAPPDATA%\Microsoft\VisualStudio\15.0_*) do reg unload HKLM\_TMPVS_%%~nxf

注意:看起来可能需要更新以搜索15.*_*16.*_*才能检测到点发布以及Visual Studio 2019。