vcpkg如何查找Visual Studio Build Tools?本地安装未被识别怎么办?
问题描述
我按照无管理员权限的步骤,通过以下脚本本地安装了Visual Studio Build Tools:
# Visual Studio build tools Write-Host "Installing visual studio build tools..." -ForegroundColor Cyan cd $env:USERPROFILE $exePath = "$env:TEMP\vs.exe" Invoke-WebRequest -Uri https://aka.ms/vs/17/release/vs_BuildTools.exe -UseBasicParsing -OutFile $exePath Write-Host "layout..." -ForegroundColor Cyan Start-Process $exePath -ArgumentList "--layout .\vs_BuildTools --quiet" -Wait cd vs_BuildTools Write-Host "actual installation..." -ForegroundColor Cyan Start-Process vs_setup.exe -ArgumentList "--installPath $env:USERPROFILE\vs_BuildTools2022 --nocache --wait --noUpdateInstaller --noWeb --allWorkloads --includeRecommended --includeOptional --quiet --norestart" -Wait
但使用以下脚本通过vcpkg安装gtest时:
Write-Host "Installing vcpkg..." -ForegroundColor Cyan git clone https://github.com/Microsoft/vcpkg.git C:\src\vcpkg C:\src\vcpkg\bootstrap-vcpkg.bat C:\src\vcpkg\vcpkg.exe --version C:\src\vcpkg\vcpkg.exe install gtest
出现报错:
error: in triplet x64-windows: Unable to find a valid Visual Studio instance
我想了解:
- vcpkg是在哪里查找Visual Studio Build Tools安装目录的?
- 是否可以通过设置环境变量让vcpkg识别到我的本地安装?
解答
一、vcpkg查找Visual Studio实例的逻辑
vcpkg通过以下三种方式定位VS/VS Build Tools:
- 注册表项:优先读取系统或用户注册表中的VS安装信息,比如
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\VisualStudio\SxS\VS7(系统级)或HKEY_CURRENT_USER\SOFTWARE\Microsoft\VisualStudio\SxS\VS7(用户级)。但非管理员安装的VS Build Tools可能不会写入系统注册表,或仅写入用户注册表但未被vcpkg正确读取。 - VSWhere工具:vcpkg内置
vswhere.exe,通过它扫描已注册的VS实例。默认情况下,vswhere会识别系统级安装和符合官方规范的用户级安装,但未正确注册的非管理员安装可能被遗漏。 - 环境变量:如果存在指定VS安装路径的环境变量,vcpkg会优先使用该路径。
二、让vcpkg识别非管理员安装的VS Build Tools的方法
1. 设置环境变量指定安装路径
直接设置VCPKG_VISUAL_STUDIO_PATH环境变量,指向你的VS Build Tools安装目录:
# 运行vcpkg前执行该命令 $env:VCPKG_VISUAL_STUDIO_PATH = "$env:USERPROFILE\vs_BuildTools2022"
也可以在系统/用户环境变量中添加该变量,值为你的实际安装路径(比如C:\Users\<你的用户名>\vs_BuildTools2022)。
2. 手动注册到用户注册表
非管理员安装的VS Build Tools可能未写入注册表,可手动添加用户注册表项:
- 打开注册表编辑器(
regedit.exe),定位到HKEY_CURRENT_USER\SOFTWARE\Microsoft\VisualStudio\SxS\VS7 - 新建字符串值,名称为VS版本号(比如VS2022对应
17.0),值为你的安装路径(需以反斜杠结尾,如C:\Users\<你的用户名>\vs_BuildTools2022\) - 重启终端后再运行vcpkg命令
3. 执行VS环境初始化脚本
在运行vcpkg前,先执行VS Build Tools自带的环境脚本,让系统识别编译环境:
& "$env:USERPROFILE\vs_BuildTools2022\Common7\Tools\VsDevCmd.bat" -arch=x64
执行完成后再运行vcpkg安装命令,vcpkg就能通过环境变量识别到VS实例。
内容的提问来源于stack exchange,提问作者Poperton
相关产品推荐
相关产品推荐

