我无法在PowerShell中使用cl
命令。
我尝试将以下命令添加到我的PowerShell配置文件中以执行vcbuildtools.bat
,但PowerShell无法识别PowerShell上的cl
命令?
&"C:\Program Files (x86)\Microsoft Visual C++ Build Tools\vcbuildtools.bat"
操作系统:Windows 10
答案 0 :(得分:2)
要明确我正在解决提问者的问题cl
即使在PowerShell中运行后也不在PATH中
&"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。
一种方法是使用subshell从父shell继承环境的事实。因此,如果您在PowerShell中运行它,则保留批处理文件设置的环境
cmd.exe /k "C:\Program Files (x86)\Microsoft Visual C++ Build Tools\vcbuildtools.bat" `& powershell
记下`&
。该角色必须进行转义,因为它在PowerShell中具有特殊含义。
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
。
注释
PowerShellGet
,并且可以作为PowerShell 3和4的可下载安装程序使用。答案 1 :(得分:0)
PowerShell库中的另一个选项: posh-vs
使PowerShell中的Visual Studio命令行工具可用。支持Visual Studio 2017和2015。
答案 2 :(得分:0)
您可以使用以下函数来调用cmd.exe Shell脚本(批处理文件)并保留其环境变量:
function Invoke-CmdScript {
param(
[String] $scriptName
)
$cmdLine = """$scriptName"" $args & set"
& $env:SystemRoot\system32\cmd.exe /c $cmdLine |
Select-String '^([^=]*)=(.*)$' | ForEach-Object {
$varName = $_.Matches[0].Groups[1].Value
$varValue = $_.Matches[0].Groups[2].Value
Set-Item Env:$varName $varValue
}
}
将此功能添加到您的PowerShell配置文件中,并使用以下功能运行批处理文件:
Invoke-CmdScript "C:\Program Files (x86)\Microsoft Visual Studio 14.0\Common7\Tools\vsvars32.bat"
答案 3 :(得分:0)
幸运的是,VS 2019社区现在具有一个用于VS 2019的开发人员PowerShell 命令。
如果要查看快捷方式的属性,实际命令相当冗长。
C:\Windows\SysWOW64\WindowsPowerShell\v1.0\powershell.exe -noe -c "&{Import-Module """C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\Common7\Tools\Microsoft.VisualStudio.DevShell.dll"""; Enter-VsDevShell 14bbfab9}"
无论如何,我正在使用它,它向我的路径添加了正确的cl.exe,但是运行它后却出现一条奇怪的消息:
C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.23.28105\include\ostream(750): warning C4530: C++ exception handler used, but unwind semantics are not enabled. Specify /EHsc
.\hey.cpp(4): note: see reference to function template instantiation 'std::basic_ostream<char,std::char_traits<char>> &std::operator <<<std::char_traits<char>>(std::basic_ostream<char,std::char_traits<char>> &,const char *)' being compiled
答案 4 :(得分:0)