(一) 为什么要用 vcpkg:
Windows下开发C/C++程序,少不了编译开源的第三方库, 比如用于网络连接的高性能库libcurl、用于压缩解压的zlib等等。
使用这些库开发极大的方便了程序员,使得我们不必重复造轮子。但是使用这些库必须要处理N多问题: 由于这些开源库绝大部分都来源于Linux系统,导致其工程文件、编译系统都使用gnu系列工具,使得将其移植到Windows的VC开发环境下一直是难点。尽管最近几年很多开源库都支持了跨平台的cmake,但是编译过程仍然复杂和多样化。
(二) vcpkg的优点
- 自动下载开源库源代码
- 源码包的缓存管理和版本管理,可以升级版本
- 轻松编译
- 依赖关系检查(比如编译libcurl,会自动下载zlib、openssl进行编译)
- 无缝集成Visual Studio,不需要设置库文件、头文件的所在目录,自动集成。
- Visual Studio全平台支持,不仅支持Debug/Release、x86/x64编译,还支持UWP、ARM平台的编译
git clone https://github.com/microsoft/vcpkg #获取
cd vcpkg
bootstrap-vcpkg.bat # 编译好后会在同级目录下生成vcpkg.exe文件。编译期间,脚本会自动下载vswhere组件
.\vcpkg.exe search #查询可用的第三方库(列表)
.\vcpkg.exe integrate install #集成到全局
.\vcpkg.exe integrate remove #移除全局集成
.\vcpkg.exe integrate project #集成到工程, 会在“\scripts\buildsystems”目录下,生成nuget配置文件.
.\vcpkg.exe install opencv[cuda,contrib]:x64-windows #或者下面
.\vcpkg.exe install xxx --triplet x64-windows
.\vcpkg.exe remove xxx
#同事间可导出/导入
.\vcpkg.exe export xxx --7zip
.\vcpkg.exe import xxx.7z
# --raw 以不打包的目录格式导出
# --nuget 以nuget包形式导出
# --ifw
# --zip 以zip压缩包形式导出
# --7zip 以7z压缩包形式导出
vcpkg默认安装32位的包,为了让它安装64位的包,可以添加系统环境变量:
VCPKG_DEFAULT_TRIPLET=x64-windows
解决vcpkg下载缓慢的问题
https://blog.csdn.net/qq_39690181/article/details/82910610
vcpkg 体积太大问题
清空 vcpkg下的 buildtrees 这个文件夹
在cmake文件中加入
-DCMAKE_TOOLCHAIN_FILE=/scripts/buildsystems/vcpkg.cmake
(二) Vcpkg的缺点:
- 有些包或有些包的某些环境,质量太低,之前我经历过有些包安装了好几个小时之后编译失败,或者运行时报错,那是非常非常不爽
- 包能安装的环境配置,是通过cmake代码来完成,这样就可以尽早的从配置不支持中报错返回而不是等几个小时编译后才失败
- 社区互动。现在知道vcpkg的少,用vcpkg的人更不多,微软的维护者也跟我说最希望在vcpkg中看到的就是社区互动,希望大家关注vcpkg,试试vcpkg,说说它的好与不好。
- CI(持续集成),也是为了提高质量。现在vcpkg后台有一定的CI,但远远不够。现在的CI主要跑了一些安装之类的流程,但没有具体与跑每一个包下的每一个配置。这就导致如果包之类有显式或潜在的依赖,改了一个包就可能让另一个包炸了,这也是可以提升的地方,微软的维护者也说在working on it.
============ 参考 ==============
Achilles: [Visual Studio开源库集成器Vcpkg全教程]
知乎大v: [如何看待 Windows 的 C++ 包管理器 vcpkg?]