运行 vcvarsall,但 cl 和其他仍然不可用

run vcvarsall, but cl and other still unavailable

如题,执行后使用Powershell

PS C:\Program Files (x86)\Microsoft Visual Studio19\Community\VC\Auxiliary\Build> .\vcvarsall.bat amd64

那么像 clnmakemsbuild 这样的程序应该在路径上可用,但它们不是

PS C:\Program Files (x86)\Microsoft Visual Studio19\Community\VC\Auxiliary\Build> cl cl : The term 'cl' is not recognized as the name of a cmdlet, function, script file, or operable program. Check the spelling of the name, or if a path was included, verify that the path is correct and try again. At line:1 char:1

  • cl
  • ~~
    • CategoryInfo : ObjectNotFound: (cl:String) [], CommandNotFoundException
    • FullyQualifiedErrorId : CommandNotFoundException

规格:

我错过了什么?

Powershell 在子 cmd 进程中执行批处理文件。 VS 环境在那个 cmd 进程中设置,然后在进程结束时被丢弃并控制 returns 到 Powershell。

直截了当的解决办法是把顺序倒过来,在启动Powershell会话前设置VS环境,让PS继承。假设通常的 VS 安装具有正确的 VS160COMNTOOLS 环境变量集,这可以通过 运行 在命令提示符下通过 Start / 运行 或从 PS 执行以下操作]本身。

cmd /c ""%VS160COMNTOOLS%\..\..\VC\Auxiliary\Build\vcVarsAll.bat" amd64 && start powershell"

另请参阅 and How can I use PowerShell with the Visual Studio Command Prompt? 以了解更多讨论和可能的替代方案 - 通常用于将环境变量从批处理文件返回到 PS,特别是用于 VS 环境。