如果你希望了解vcpkg,希望解决包括如何使用vcpkg构建软件包,如何将vcpkg构建的软件包集成到Visual Studio,如何使用vcpkg构建指定版本的软件包,如何解决vcpkg的常见报错信息,如何与CMake配合构建工程等等问题,请你认真阅读本文档以快速入门!
1. 简介
vcpkg 是适用于 C 和 C++ 库的跨平台命令行包管理器。 它简化了 Windows、Linux 和 macOS 上第三方库的购置与安装。 如果项目要使用第三方库,建议通过 vcpkg 来安装它们。 vcpkg 同时支持开源和专有库。 已测试 vcpkg Windows 目录中所有库与 Visual Studio 2015、Visual Studio 2017 及 Visual Studio 2019 的兼容性。 在 Windows 和 Linux/macOS 目录之间,vcpkg 现已支持数千个库。 C++ 社区会不断向两个目录添加更多的库。
2. 安装与使用
2.1 获取vcpkg
vcpkg的官方源码站点为:https://github.com/microsoft/vcpkg
可以使用git命令获取官方代码仓库
git clone https://github.com/microsoft/vcpkg
2.2 编译vcpkg
-
Windows平台
在控制台中切换到vcpkg所在目录,运行vcpkg目录下的
bootstrap-vcpkg.bat
命令,编译好后会在vcpkg所在目录下生产vcpkg.exe
文件。C:\Users\Administrator>F: F:\>cd vcpkg/vcpkg F:\vcpkg\vcpkg>bootstrap-vcpkg.bat
注意:最新版官方去掉了本地编译的过程,会从官方仓库中下载已经生成好的vcpkg.exe文件
-
Linux平台
在终端中执行vcpkg目录下的
sudo bash ./ bootstrap-vcpkg.sh
命令,会生成一个可执行文件vcpkg
。定义环境变量VCPKG_ROOT="/vcpkg"
2.3 vcpkg的文件夹层次结构
所有 vcpkg 功能和数据都自包含在实例的单独目录层次结构中。 没有注册表设置或环境变量。 可以在一台计算机上设置任意数量的 vcpkg 实例,它们彼此互不干扰。vcpkg 的文件夹层次结构如下:
buildtrees
- 包含从中生成每个库的源的子文件夹。docs
- 文档和示例。downloads
- 所有已下载的工具或源的缓存副本。 运行安装命令时,vcpkg 会首先搜索此处。installed
- 包含每个已安装库的标头和二进制文件。 与 Visual Studio 集成时,实质上是相当于告知它将此文件夹添加到其搜索路径。packages
- 在不同的安装之间用于暂存的内部文件夹。ports
- 用于描述每个库的目录、版本和下载位置的文件。 如有需要,可添加自己的端口。scripts
- 由 vcpkg 使用的脚本(CMake、PowerShell)。toolsrc
- vcpkg 和相关组件的 C++ 源代码。triplets
- 包含每个受支持目标平台(如 x86-windows 或 x64-uwp)的设置。
2.4 设置vcpkg的环境变量
为了方便vcpkg的使用,建议在环境变量中设置如下值:
环境变量 | 值 | 描述 |
---|---|---|
VCPKG_DEFAULT_TRIPLET | x64-windows | vcpkg默认构建的三元组,通常在Windows 64位平台下可以直接设置为x64-windows |
VCPKG_ROOT | F:\vcpkg\vcpkg | vcpkg的工作目录,对于本地存在多个版本的vcpkg,不建议设置此变量 |
VCPKG_DOWNLOADS | F:\vcpkg\downloads | vcpkg下载软件源和工具的缓存目录,建议保留此文件夹中的所有文件。 |
2.5 vcpkg的常用命令
-
help命令
可以查看vcpkg的常用命令
vcpkg help
-
install命令
安装一个指定的软件包,该C++软件包必须被vcpkg支持,即在
ports
文件夹内能找到该软件包的端口描述。vcpkg install gdal
需要注意的是,通常一个软件包可以附带多种其他三方库的功能支持,部分功能已经被vcpkg支持(可以通过 s e a r c h search search命令查看软件包附带的第三方支持),通过vcpkg安装软件包时也可以同时制定三方库特性的支持。例如安装一个Windows系统64位版本的带
libspatialite
支持的gdal库可以使用如下命令:vcpkg install gdal[core,libspatialite] --triplet=x64-windows
vcpkg在编译软件包时,会将从软件包官方源中下载到的tar格式源码解压到
buildtrees
文件夹,并且编译的中间文件也会在buildtrees
文件夹。默认情况下,buildtrees
文件夹在vcpkg的根目录下,也可以在安装软件包时指定buildtrees
文件夹的实际位置,例如:vcpkg install gdal[core,libspatialite] --triplet=x64-windows --x-buildtrees-root=F:/vcpkg/buildtrees
-
remove命令
移除一个指定的安装包,例如删除已经安装好的gdal包使用如下命令:
vcpkg remove gdal
如果希望移除所有outdated的安装包,可以使用以下命令:
vcpkg remove --outdated
有些时候,仅仅通过remove命令删除已经安装好的软件包会出现异常。例如可能出现删除安装包后,重新安装包提示“已经安装”。如果我们需要彻底将包从
installed
目录中移除,需要执行以下流程:-
从
packages
目录中找到包对应的目录(注意区分版本),将整个目录全部删除; -
从
buildtrees
目录中找到包对应的目录,将整个目录全部删除; -
进入
installed\vcpkg\info
目录,查找包对应的 l i s t list list文件。 l i s t list list文件中记录了包生成后的lib、dll、pdb、include头文件和其他辅助文件,手动删除这些文件,最后删除 l i s t list list文件本身; -
进入
installed\vcpkg
目录,打开 s t a t u s status status文件,搜索包,将包相关内容手动删除。
-
-
list命令
列表所有已经安装的软件包,也可以指定名以列出按照的某一具体软件包
vcpkg list # list all installed packages vcpkg list gdal # list installed gdal
通过 l i s t list list命令可以方便地查询某个安装包是否安装以及对应的安装版本:
-
search命令
搜索vcpkg支持的安装包:
vcpkg search gdal
当需要查看安装包附带哪些三方库支持时,使用 s e a r c h