文章目录
- VS2019,VCPKG - 为VS2019添加VCPKG
- 概述
- 笔记
- 前置条件
- 迁出vcpkg到本地
- 验证库安装
- 更新已经安装的库
- 删除指定的包
- 安装VS2019能用的boost
- vcpkg 2025.02.14 版本可以给VS2019用
- 用VCPKG的好处
- 备注
- END
VS2019,VCPKG - 为VS2019添加VCPKG
概述
开源工程用到了VCPKG管理的包。
开源工程是VS2022的,用VS2019也能打开,将工具链换一下就行。
现在已经为VS2019添加了VCPKG, 记录一下。
笔记
前置条件
- 安装了git
- 安装了VS2019(有C++的负荷)
- 将VS2019界面改为英文
迁出vcpkg到本地
以管理员权限打开Git CMD
D:\3rd\vsgit clone git@github.com:microsoft/vcpkg.git
# 等待迁出完成# 安装vcpkg
cd vcpkg
.\bootstrap-vcpkg.bat# 将vcpkg集成进VS2019
.\vcpkg integrate install
将powershell-core的路径加入自己用户的环境变量, 否则用VCPKG时,找不到pwsh.exe
D:\3rd\vs\vcpkg\downloads\tools\powershell-core-7.2.24-windows
VS2019中添加新源
VS → 工具 → 选项 → NuGet 包管理器 → 程序包源
程序包源为自己迁出的vcpkg工程中的子目录,如下:
D:\3rd\vs\vcpkg\scripts\buildsystems
验证库安装
# 看看装了啥库
.\vcpkg list # 搜索库, 如果看到的库是新版,不是自己想要的,那么就要将vcpkg的git版本向前退
.\vcpkg search boost# 尝试安装库(拿一个小库来实验)
.\vcpkg --debug install winsock2:x64-windows
更新已经安装的库
./vcpkg.exe update --debug
这里看不到安装的那个库, 有点奇怪。是不是VS2019本身就有的库,安装完也没用。
包含头文件(如 #include <Winsock2.h>),编译无报错即表示成功
// test_vs2019_vcpkg.cpp#include <iostream>
#include <Winsock2.h>int main()
{std::cout << "Hello World!\n";
}
删除指定的包
打开 Git CMD
# 查看包列表
vcpkg list# 将报名拷贝下来,运行下列命令
vcpkg remove --recurse [包的全名]# 例子
vcpkg remove --recurse vcpkg-boost:x64-windows
安装VS2019能用的boost
# 从boost文档和源码中,并没有看到什么时候停止对VS2019的支持。
# 安装当前的最新版1.87.0, 已经不支持VS2019. 原因是有一个boost组件要求用VS2022
# 现在只能从源码中看TAG, 然后一个一个TAG的降版本,直到VS2019中能正常编译过。# 先查看vcpkg的git版本,找到boost1.87.0之前的那个版本。
# 然后将vcpkg退回去git fetch --tags
git tag --sort=-creatordategitk ./ports/boost/vcpkg.json
566f9496b7e00ee0cc00aca0ab90493d122d148a 在这个ID上变成了1.87.0d5ec528843 (tag: 2025.02.14) Promote x64-windows-release out of community (#43555)
这是时间往前推的最近的稳定版,签到这个版本试试。git checkout 2025.02.14vcpkg install boost:x64-windows
vcpkg 2025.02.14 版本可以给VS2019用
// test_vs2019_vcpkg.cpp#include <iostream>
#include <boost/filesystem.hpp>
#include <boost/version.hpp> // Boost版本: 1_86
namespace fs = boost::filesystem;int main() {// 打印Boost版本std::cout << "Boost版本: " << BOOST_LIB_VERSION << std::endl;// 遍历当前目录文件fs::path dir_path(".");if (fs::exists(dir_path) && fs::is_directory(dir_path)) {for (const auto& entry : fs::directory_iterator(dir_path)) {std::cout << entry.path().filename() << std::endl;}}return 0;
}
用VCPKG的好处
只需要勾选"使用VCPKG", 头文件和库文件都不用设置。
备注
如果是使用VS2019 + VCPKG, 那么VCPKG的版本最高只能为 2025.02.14,否则VCPKG本身的库编译过不了,现在发现是boost版本不能高于1.86.0。
如果是使用VS2019 + boost, 那么boost最高版本只能是1.86.0, 否则boost中有个组件需要依赖VS2022, 导致boost不能完全编译过。