Vcpkg——C++包管理工具

在Windows下开发C++程序时,常用依赖包的管理是一个头疼的问题。Vcpkg是一个命令行包管理工具,它可以极大地简化三方库的获取、安装、使用和部署流程。

简单而又灵活

Vcpkg是微软团队在GitHub上的一个开源项目,它提供一系列简单的命令,自动下载源码然后编译成三方库,而且并不依赖于Windows注册表或Visual Studio。

Vcpkg允许多份克隆同时存在于同一台机器上,每一份克隆都是一个完整独立的环境,拥有独立的三方库和编译选项。

源码级兼容

在编写C++程序时,一直有二进制兼容的问题。在可执行文件链接到三方库时,编译器的类型和版本的统一非常重要。Vcpkg通过下载源码(而不是二进制文件)的方式来提供三方库。它使用机器上最新版本的Visual Studio编译器来编译三方库源码和用户应用程序。这种方式减少了二进制不兼容的可能性,也尽可能避免了潜在的问题。

一般来说,开发团队会共用同一开发环境。为此,我们可以在一台机器上使用Vcpkg来下载并编译一组二进制文件,然后使用一些导出命令来打包头文件、库文件供团队使用。

安装

从Github上克隆Vcpkg仓库然后执行安装命令即可:

可选:

  • 设置环境变量——将vcpkg.exe文件所在目录加入到环境变量PATH中

搜索可用库

查看可用库列表的命令如下:vcpkg search

这条命令会列举vcpkg/ports子文件夹中的控制文件。搜索的结果如下:

1
2
3
4
5
6
7
8
ace       6.4.3   The ADAPTIVE Communication Environment
anax 2.1.0-1 An open source C++ entity system. \<https://github...
antlr4 4.6-1 ANother Tool for Language Recognition
apr 1.5.2 The Apache Portable Runtime (APR) is a C library ...
asio 1.10.8 Asio is a cross-platform C++ library for network ...
assimp 3.3.1 The Open Asset import library
atk 2.24.0 GNOME Accessibility Toolkit
...

也可以加入一些过滤,如vcpkg search ta

1
2
3
botan       2.0.1      A cryptography library written in C++11
portaudio 19.0.6.00 PortAudio Portable Cross-platform Audio I/O API P...
taglib 1.11.1-2 TagLib Audio Meta-Data Library

安装三方库

三方库的下载和编译命令是vcpkg install

默认情况下,Vcpkg使用的编译环境是x86-windows, x64-linux.cmake或x64-osx.cmake。

1
2
3
4
5
6
7
> vcpkg install boost:x86-windows

The following packages will be built and installed:
boost:x86-windows
* bzip2:x86-windows
* zlib:x86-windows
Additional packages (*) will be installed to complete this operation.

查看已安装的三方库

命令vcpkg list可以查询已有的三方库:

1
2
3
4
5
6
7
8
> vcpkg list

boost:x86-windows 1.64-3 Peer-reviewed portable C++ source libraries
bzip2:x86-windows 1.0.6-1 High-quality data compressor.
cpprestsdk:x86-windows 2.9.0-2 C++11 JSON, REST, and OAuth library The C++ REST ...
openssl:x86-windows 1.0.2k-2 OpenSSL is an open source project that provides a...
websocketpp:x86-windows 0.7.0 Library that implements RFC6455 The WebSocket Pro...
zlib:x86-windows 1.2.11 A compression library

集成至Visual Studio中(Windows)

与手动指定目录不同,我们可以通过一条命令将所有三方库的头文件和二进制文件自动配置到Visual Studio中。

集成的命令是vcpkg integrate install

1
2
3
4
5
6
7
8
> vcpkg integrate install
Applied user-wide integration for this vcpkg root.

All MSBuild C++ projects can now #include any installed libraries.
Linking will be handled automatically.
Installing new libraries will make them instantly available.

CMake projects should use: "-DCMAKE_TOOLCHAIN_FILE=D:/library/vcpkg/scripts/buildsystems/vcpkg.cmake"

配置完成后,在VS项目中便可以直接#include三方库目录/头文件,而库的引用和链接会自动完成。

vcpkg-intellisense

对于CMAKE项目来说,如果要通过find_package()使用安装后的三方库,必须要制定环境变量CMAKE_TOOLCHAIN_FILE。

1
cmake .. -DCMAKE_TOOLCHAIN_FILE=D:/library/vcpkg/scripts/buildsystems/vcpkg.cmake

参考

  1. vcpkg: A C++ package manager for Windows, Linux and MacOS
  2. 如何看待 Windows 的 C++ 包管理器 vcpkg?