vcpkg 使用#
vcpkg 是一个开源的 C++ 包管理器,由 Microsoft 开发。它旨在简化在 Windows、Linux 和 macOS 上获取和构建开源 C++ 库的过程。通过 vcpkg,开发者可以轻松管理依赖项,避免手动编译和配置的复杂性。
> vcpkg#
安装配置#
以 Linux 上使用作为示例,详细使用内容请参考官方文档。
设置 vcpkg#
添加到 PATH#
将 vcpkg 目录添加到系统 PATH 环境变量中,以便全局使用 vcpkg 命令(例如在 ~/.bashrc 中添加)。
验证安装#
运行 vcpkg version 检查是否安装成功。
使用 CMake 集成包#
# 1. 创建/克隆项目目录
mkdir helloworld && cd helloworld
# 2. 创建清单文件 (vcpkg.json)
vcpkg new --application
# 3. 添加依赖
vcpkg add port fmt
# 4. 安装依赖(默认安装到本地 vcpkg_installed)
vcpkg install
# 5. 构建 helloworld(通用方法,不使用 CMakePresets.json)
mkdir build && cd build
cmake .. -DCMAKE_BUILD_TYPE=Debug -DVCPKG_INSTALLED_DIR=./vcpkg_installed -DCMAKE_TOOLCHAIN_FILE=$VCPKG_ROOT/scripts/buildsystems/vcpkg.cmake
make
# 6. 运行 helloworld
./helloworld
vcpkg/get_started package查询: packages 示例代码地址: git@github.com:Ts-sound/vcpkg_examples.git
offline#
vcpkg 支持离线安装包,适用于网络受限环境。
导出包#
在有网络的环境中导出包及其依赖:
- 导出的是当前工作空间 vcpkg_installed 下的文件,已经编译好的库,如下:
- 可以作为 SDK 使用
vcpkg_installed
|-- arm64-linux
| |-- debug
| |-- include
| |-- lib
| `-- share
|-- vcpkg
| |-- compiler-file-hash-cache.json
| |-- info
| |-- manifest-info.json
| |-- status
| |-- updates
| `-- vcpkg-lock.json
`-- x64-linux
`-- ...
离线安装#
在目标机器上解压文件使用, 文件结构:
- A CMake toolchain at
/scripts/buildsystems/vcpkg.cmake - MSBuild props/targets at
/scripts/buildsystems/msbuild/vcpkg.propsand/scripts/buildsystems/msbuild/vcpkg.targets - The installation tree at
/
注意事项#
- 需要预先导出所有依赖
- 确保目标平台与导出平台一致
另一种方法#
- 直接打包 vcpkg 项目及其 downloads 下的缓存文件。
- 离线环境配置好后,使用
vcpkg install --no-downloads(仅使用之前下载的文件)。
vcpkg # vcpkg 可执行文件
...
downloads/
|-- boostorg-accumulators-boost-1.87.0.tar.gz
|-- boostorg-algorithm-boost-1.87.0.tar.gz
|-- boostorg-align-boost-1.87.0.tar.gz
|-- ...
crosscompile#
vcpkg 支持交叉编译,允许在一种平台上为另一种平台构建包。
指定目标 triplet#
使用前需要把交叉编译工具
path添加到环境变量;
vcpkg install <package>:<triplet>
# e.g.
vcpkg install fmt:x64-linux
# e.g. manifest 安装当前工作空间 ,指定 arm64-linux
vcpkg install --triplet arm64-linux
# build helloworld
mkdir build_arm64 && cd build_arm64
cmake .. -DCMAKE_BUILD_TYPE=Debug -DVCPKG_INSTALLED_DIR=./vcpkg_installed -DCMAKE_TOOLCHAIN_FILE=$VCPKG_ROOT/scripts/buildsystems/vcpkg.cmake \
-DVCPKG_TARGET_TRIPLET=arm64-linux \
-DCMAKE_C_COMPILER=aarch64-linux-gnu-gcc \
-DCMAKE_CXX_COMPILER=aarch64-linux-gnu-g++ \
-DCMAKE_SYSTEM_NAME=Linux \
-DCMAKE_SYSTEM_PROCESSOR=aarch64
make
# 6. check
file HelloWorld
## out : HelloWorld: ELF 64-bit LSB executable, ARM aarch64, ...
注意事项#
- 交叉编译工具可以使用
apt安装 或 自行下载解压。 - 需要把交叉编译工具
path添加到环境变量:
# export the cross compiler bin path
export PATH=$PATH:/opt/tong/toolchain/gcc-linaro-7.5.0-2019.12-x86_64_aarch64-linux-gnu/bin
- vcpkg linux toolchain 逻辑写在
scripts/toolchains/linux.cmake里面,如下:- 所以一般情况下可以直接把我们的 toolchain 的 bin 路径添加到 PATH 环境变量就可以识别了;
set(GNU_TRIPLET "${CMAKE_SYSTEM_PROCESSOR}-linux-gnu")
if(CMAKE_SYSTEM_PROCESSOR STREQUAL "armv7l")
set(GNU_TRIPLET "arm-linux-gnueabihf")
endif()
if(NOT DEFINED CMAKE_CXX_COMPILER)
set(CMAKE_CXX_COMPILER "${GNU_TRIPLET}-g++")
endif()
#...
常用 triplets#
x64-windows: 64位 Windowsx86-windows: 32位 Windowsx64-linux: 64位 Linuxarm64-linux: ARM64 Linuxx64-osx: 64位 macOS