vcpkg——C/C++的包管理器,在Windows上安装、使用及遇到的问题
一、介绍
vcpkg是可用于Windows,linux和MacOS上跨平台的 C/C++ 库管理工具,且开源。
博客园地址:https://www.cnblogs.com/vcpkg/ (这里相当于命令手册)
目前github需要FQ, 看到有人做了国内镜像:
https://gitee.com/jackboosy/vcpkg
设置环境变量:
X_VCPKG_ASSET_SOURCES
值为:x-azurl,http://106.15.181.5/
并确保你的vcpkg为最新的(重新执行bootstrap脚本)即可。
二、安装
要求:
- Windows 7 or newer
- Git
- Visual Studio 2015 Update 3 or newer
具体的组件要求可以参考:vcpkg的Visual Studio组件最低要求
vcpkg会自动安装CMake等组件。
注意git路径要在PATH中。
安装步骤:
很简单,这里有step by step : https://vcpkg.io/en/getting-started.html
即,(获取vcpkg)从github下载解压,或git获取后,(编译vcpkg)执行vcpkg\bootstrap-vcpkg.bat,即可生成vcpkg.exe。
安装后,将vcpkg所在目录加入PATH。
三、使用
列出已安装的C/C++库
vcpkg list
安装C/C++库
vcpkg install [packages to install]
例如,安装zlib,不确定vcpkg中有没有这个库,可以使用vcpkg search:
查看代码D:\>vcpkg search zlib
ace[zlib] Enable zlib support
boost-iostreams[zlib] Support zlib filters
botan[zlib] Build with zlib. Enable compression pipes.
………………太多,省略………………
zlib 1.2.12#1 A compression library
zlib-ng 2.0.6 zlib replacement with optimizations for 'next generation' systems
zstr 1.0.4#2 This C++ header-only library enables the use of C++ standard iostreams to ...
The result may be outdated. Run `git pull` to get the latest results.
If your port is not listed, please open an issue at and/or consider making a pull request:
https://github.com/Microsoft/vcpkg/issues
(按照提示,怀疑有vcpkg内容太旧的可能,可以"git pull"重新获取vcpkg最新版本。)
(如果你是库的作者,没有你的库,可以去https://github.com/Microsoft/vcpkg/issues提交。)
接下来执行:
vcpkg install zlib
默认会安装x86-windows的设置,等价于:
vcpkg install zlib:x86-windows
添加环境变量 VCPKG_DEFAULT_TRIPLET=x64-windows 可默认安装64位。
install命令的详细使用方法:vcpkg 常用命令 - Install
这个x86-windows 或 x64-windows 叫 triplet,在 vcpkg\triplets 下有哪些配置文件,命令行就可以使用哪些值,
也可以用命令查看
vcpkg help triplets
triplet配置可以指定VC编译器版本、选择静态/动态库、x86/x64等,具体参见:Triplet Files 详细说明(英文)、VCPKG 环境变量
在triplets下有一个x64-windows-static.cmake,是编译静态库用的,上面提到的x86/x64-windows是配置成编译动态库的。
其中Community triplets是社区提交的,未经持续集成测试。
在VC项目中使用:
常规情况下,我们编译或安装一些第三方库后,需要手动设置 include 目录、lib 目录、环境变量等,会有很多工作量。
vcpkg 提供了一套机制,可以全自动的适配目录,而开发者不需要关心已安装的库的目录在哪里,也不需要设置。这是vcpkg的一大优势。
装好库后,只需执行:
vcpkg integrate install
即可,这时在VC项目中可以随意#include库的头文件,编译时dll也会自动拷贝到目标目录。
以上是针对所有项目都可用。
如果只想集成到一个VS项目中,可用
vcpkg integrate project
执行后会在 vcpkg\scripts\buildsystems 目录下,生成nuget配置文件,在VS中添加“程序包源”,安装到项目就可以了。具体操作参见:https://zhuanlan.zhihu.com/p/153199835
与vcpkg install命令相对的是vcpkg remove <pkg>,删除库;
与vcpkg integrate install相对的是vcpkg integrate remove,取消全局集成。
导出C/C++库:
vcpkg export <pkg>... [opt]…
例如,导出多个库,且其中一个库要64位版本,并用7z打包:
查看代码> vcpkg export openssl:x64-windows curl zlib --7zip
The following packages are already built and will be exported:
curl:x86-windows
openssl:x64-windows
* vcpkg-cmake:x64-windows
* vcpkg-cmake-config:x64-windows
* vcpkg-cmake-get-vars:x64-windows
zlib:x86-windows
Additional packages (*) need to be exported to complete this operation.
Exporting package vcpkg-cmake:x64-windows...
Exporting package vcpkg-cmake-config:x64-windows...
Exporting package vcpkg-cmake-get-vars:x64-windows...
Exporting package openssl:x64-windows...
Exporting package zlib:x86-windows...
Exporting package curl:x86-windows...
Creating 7zip archive...
7zip archive exported at: D:\vcpkg\vcpkg-export-20220616-143454.7z
To use the exported libraries in CMake projects use:
-DCMAKE_TOOLCHAIN_FILE=[...]/scripts/buildsystems/vcpkg.cmake
export命令其它参数参见:vcpkg 常用命令 - Export
可以为各平台导出为各种格式。
卸载
只需删除 vcpkg 目录。 删除此目录会卸载 vcpkg 以及 vcpkg 已安装的所有库。
四、问题
1.使用vcpkg remove删除库,使用了--purge、--recurse参数,再次安装库似乎还是从缓存中恢复的,不知道是什么原因。因为要切换VC版本,不清空缓存的话,库就一直是一个版本没法切换了。
vcpkg如何全面卸载和重新安装包 中提到:
如果要vcpkg启动全新的安装,当用remove是不行的,一定要把
C:\Users\<user>\AppData\Local\vcpkg
里的内容清空掉才行。
原因,
vcpkg的搜索路径貌似是这样的,先到安装地址buildtrees去找
D:\vcpkg\buildtrees\osg
然后再到用户目录下面去找,找到了就直接用老的换上去,默认其他都是OK的,如果要完全重新安装,就要把已经有的删除掉。
2.我使用VS2019安装的VS2015执行vcpkg,总是会编译失败,也没找到原因。
以上问题,哪位知道请指点一下,不胜感激。
参考链接:
Visual Studio开源库集成器Vcpkg全教程--利用Vcpkg轻松集成开源第三方库