PowerShell 检测 Visual Studio 并使用其命令行工具
Contents
有时,当我们需要指定 VS 工具链时(例如指定使用 MSVC CLI 的 Clang:clang-cl.exe),纯粹使用 CMake 就不太够用。本文介绍在 PowerShell 中检测 VS 安装,并使用其命令行工具的方法。
定位 VS
Visual Studio (>=2017) 成功安装后,会在本机同时安装一个 vswhere.exe
的软件,该软件可以自动寻找 VS。这样一来不管 VS 安装在哪一个盘符,也不管有多少个不同版本的 VS,都可以利用该软件轻松定位。我们可以通过 ENV:XXX
语法是 PowerShell 语法。
{Env:ProgramFiles(x86)}\Microsoft Visual Studio\Installer\vswhere.exe"
& VsInstallDir -SkipAutomaticLocation -Arch amd64 -HostArch amd64
这里的 <VsInstallDir>
应当是上一步获得的 VS 安装目录。
总结
综上所述,我们可以写出这样一个函数:
function Use-VS {
{Env:ProgramFiles(x86)}\Microsoft Visual Studio\Installer\vswhere.exe"
VsWhere -latest -property installationPath
Import-Module "VsInstallDir -SkipAutomaticLocation -Arch amd64 -HostArch amd64
}
该函数的执行时间略长(~2s),为了方便,该函数可以放入 $PROFILE
,这样既能随时调用,又不会每次启动 PowerShell 都花很久。
只需调用这个函数,就能自动在当前 PowerShell 会话中激活 VS 环境。此时,VS 安装后的 cl.exe
, clang.exe
, clang-cl.exe
, ninja.exe
等软件都可以直接通过命令行调用了。例如,在我的项目中我想指定 VS 不要使用默认的 cl.exe
,而使用 MSVC 命令行接口的 LLVM 工具链,那么可以直接给 CMake 传入相应的参数 CMAKE_C_COMPILER=clang-cl.exe
以及 CMAKE_CXX_COMPILER=clang-cl.exe
。