为了清楚起见,我正在解决提问者的问题,即cl 不在 PATH 中,即使在 PowerShell 中运行它之后也是如此
&"C:\Program Files (x86)\Microsoft Visual C++ Build Tools\vcbuildtools.bat"
我认为这归结为batch file can't export variables to PowerShell(也相关:this question)的问题,正如您在vcbuildtools.bat 中发现的那样。我认为这是因为 PowerShell 调用 cmd.exe 子shell 来执行批处理文件,该批处理文件更改了子shell 中的环境,但更改不会传播到父shell,即PowerShell。
解决方案 1
一种方法是使用 subshell 从父 shell 继承环境这一事实。所以如果你在 PowerShell 中运行它,批处理文件设置的环境会被保留
cmd.exe /k "C:\Program Files (x86)\Microsoft Visual C++ Build Tools\vcbuildtools.bat" `& powershell
注意`&。该字符必须被转义,因为它在 PowerShell 中具有特殊含义。
解决方案 2
Pscx module 有一个 Import-VisualStudioVars 函数,用于导入 Visual Studio 的环境变量。一个示例用法是
Import-VisualStudioVars 2015 amd64
如果您使用 VS/BuildTools 2015 并编译 64 位程序。您可以使用Pop-EnvironmentBlock 还原更改。请参阅man Import-VisualStudioVars -full 了解更多信息。
另外,Pscx 还有一个Invoke-BatchFile 函数,它通过批处理文件保留环境更改。使用示例
Invoke-BatchFile "C:\Program Files (x86)\Microsoft Visual C++ Build Tools\vcbuildtools.bat"
更多信息请参见man Invoke-Batchfile -full。
注意事项
- 要从 PowerShell gallery 下载最新版本的 Pscx,您需要
PowerShellGet,它随 PowerShell 5 一起提供,可作为 PowerShell 3 和 4 的可下载安装程序提供。
- 对于那些使用 PowerShell 1 和 2 的用户,可以在 Codeplex 上获得旧版本的 Pscx。