PowerShell 和 VSCode 下的编译器环境
总有人问我使用 Windows 时如何快速的切换不同编译器环境,实际上在不同层次有不同的方法,可以做到非常灵活。
对于 Visual Studio,可以编写以下 PowerShell 函数来实现快速启动:
function VS-Env {
[CmdletBinding()]
param(
[Parameter(Mandatory=$false)]
[ValidateSet("amd64", "x86", "aarch64")]
[string]$Arch = "amd64"
)
& "C:\Program Files\Microsoft Visual Studio\18\Insiders\Common7\Tools\Launch-VsDevShell.ps1" -Host amd64 -SkipAutomaticLocation -Arch $Arch
}
对于 GCC 和 Clang,用类似的方法添加 Path:
function Clang-Env {
[CmdletBinding()]
param(
[Parameter(Mandatory=$false)]
[ValidateSet("amd64", "x86")]
[string]$Arch = "amd64"
)
$Bin = "D:\Projects\clang\llvm\bin"
$Runtime = "D:\Projects\clang\x86_64-windows-gnu\bin"
$env:PATH = "$Runtime;$Bin;$env:PATH"
}
function GCC-Env {
[CmdletBinding()]
param(
[Parameter(Mandatory=$false)]
[ValidateSet("amd64", "x86")]
[string]$Arch = "amd64"
)
$LibPrefix = "D:\Projects\gcc\lib"
$Bin = "D:\Projects\gcc\bin"
switch ($Arch) {
"amd64" { $Lib = $LibPrefix }
"x86" { $Lib = "$($LibPrefix)32" }
}
$env:PATH = "$Bin;$Lib;$env:PATH"
}
如果你使用 Windows 终端,那么可以设置 PowerShell 的启动参数,通过下拉菜单快速切换:
PowerShell -NoExit -Command "& {VS-Env amd64}"
PowerShell -NoExit -Command "& VS-Env amd64"
& VS-Env amd64
三者皆可。
VSCode 的 CMakeTools 提供一个功能叫做用户本地工具包,使用该 JSON 配置不同编译器后,VSCode 的状态栏就可以快速切换编译器。
[
{
"name": "Clang 21.0.0 STL Debug",
"compilers": {
"C": "D:\\Projects\\clang\\llvm\\bin\\clang.exe",
"CXX": "D:\\Projects\\clang\\llvm\\bin\\clang++.exe"
},
"cmakeSettings": {
"CMAKE_CXX_FLAGS": "--target=x86_64-windows-msvc --sysroot=D:\\Projects\\windows-msvc-sysroot -fuse-ld=lld -D_DLL=1 -lmsvcrtd -fno-rtti -Wno-unused-command-line-argument",
"CMAKE_C_FLAGS": "--target=x86_64-windows-msvc --sysroot=D:\\Projects\\windows-msvc-sysroot -fuse-ld=lld -D_DLL=1 -lmsvcrtd -Wno-unused-command-line-argument"
},
"isTrusted": true,
"keep": true
},
{
"name": "Visual Studio Community 2022 Preview - amd64",
"visualStudio": "1dd4b87f",
"visualStudioArchitecture": "x64",
"isTrusted": true,
"preferredGenerator": {
"name": "Visual Studio 17 2022",
"platform": "x64",
"toolset": "host=x64"
}
}
]
具体如何使用可以参考 CMakeTools 的文档。
最后,CMake 本身支持使用 CMakePresets.json 来快速设置编译器环境。
最简例子如下:
{
"version": 6,
"cmakeMinimumRequired": {
"major": 3,
"minor": 25,
"patch": 0
},
"configurePresets": [
{
"name": "default",
"hidden": false,
"generator": "Ninja",
"binaryDir": "${sourceDir}/build/${presetName}",
"cacheVariables": {
"CMAKE_BUILD_TYPE": "Release",
"CMAKE_C_COMPILER": "D:\\Projects\\clang\\llvm\\bin\\clang.exe",
"CMAKE_CXX_COMPILER": "D:\\Projects\\clang\\llvm\\bin\\clang++.exe",
"CMAKE_CXX_FLAGS": "--target=x86_64-windows-msvc --sysroot=D:\\Projects\\windows-msvc-sysroot -fuse-ld=lld -stdlib=libc++",
"CMAKE_C_FLAGS": "--target=x86_64-windows-msvc --sysroot=D:\\Projects\\windows-msvc-sysroot -fuse-ld=lld"
}
}
]
}
使用 cmake --preset default
或者 CMakeTools 在 VSCode 状态栏提供的按钮就可以指定使用某个编译器配置和构建项目。