Contents

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