跳转至

vcpkg

vcpkg是微软提供并维护的一个开源的C++包管理器,形式上类似于Python的pip/uv等工具。

配合CMake进行使用

适合较为轻量的项目。

使用vscode配合CMake的操作差别不大,详情可参考在 Visual Studio Code 中通过 CMake 安装和使用包

安装过程官方教程有详尽的说明,这里不再赘述。

  • 初始化

通过以下命令在项目的目录中创建清单文件:

vcpkg new --application

该命令会在项目的根目录下创建vcpkg.jsonvcpkg-configuration.json。二者的作用分别是作为依赖项列表引入基线约束

  • 修改CMakeLists.txt

CMakeLists.txt中添加以下内容:

find_package([your_lib] CONFIG REQUIRED)
表示使用第三方库的 CMake 配置文件查找该库。REQUIRED关键字确保在找不到包时生成错误。

如果只是使用一个库的某些组件,也可这样配置(以Qt6为例):

find_package(Qt6 REQUIRED COMPONENTS Core Widgets)  # 根据需要选择组件
COMPONENTS参数用于指定需要的Qt模块。

注意target_link_libraries列表中也需添加引入的第三方库名。

  • 创建 CMake 配置

参考官方教程配置CMake工具链。

Note

CMakeUserPresets.json 文件会将 VCPKG_ROOT 环境变量设置为指向包含 vcpkg 本地安装的绝对路径,因此注意配置完成后将CMakeUserPresets.json移入.gitignore,以避免信息泄漏等问题。

配置完成后即可进行生成与构建运行。

可能遇到的问题

缺少依赖项

如果在运行cmake --preset=default的过程中出现错误,且在项目的build/vcpkg-manifest-install.log日志中出现类似下面的信息:

qtbase currently requires packages from the system package manager.  They
  can be installed on Ubuntu systems via sudo apt-get install '^libxcb.*-dev'
  libx11-xcb-dev libglu1-mesa-dev libxrender-dev libxi-dev libxkbcommon-dev
  libxkbcommon-x11-dev libegl1-mesa-dev.
Call Stack (most recent call first):
  scripts/ports.cmake:206 (include)

说明缺少依赖项,根据提示安装后删除build然后重新运行cmake --preset=default进行配置生成即可。

出现问题时可通过管道命令查看是否存在依赖缺失的问题:

cat build/vcpkg-manifest-install.log | grep apt-get