vcpkg使用经验
缘起
由于某人之前用c++写了个项目,然后要引boost库(其实就为了个特殊函数),非常麻烦,然后折腾搞vcpkg了,这里把一些经验和大家分享吧。
vcpkg安装与下载
打开vcpkg官网,可以看到Windows、Linux和Mac版安装指南,照上面安装。(因为我没有mac,所以可能要自己读官网文档)
需要安装git和该平台c++编译器(Windows-VS,Linux-g++)。
Windows: 1
2git clone https://github.com/Microsoft/vcpkg.git
.\vcpkg\bootstrap-vcpkg.bat -disableMetrics1
2git clone https://github.com/Microsoft/vcpkg.git
./vcpkg/bootstrap-vcpkg.sh -disableMetrics
安装包
一般安装本平台默认包,直接输入(以boost为例): 1
./vcpkg install boost
覆盖初始triplet
现在一般Windows也是64位了,所以一般需要设置环境变量: 1
VCPKG_DEFAULT_TRIPLET = x64-windows
1
./vcpkg install boost --triplet=x64-windows-static
1
./vcpkg install boost:x64-windows-static
Android(安卓)环境变量设置
编译Android版库,需要设置ANDROID_NDK_HOME环境变量:
1
export ANDROID_NDK_HOME=/home/your-account/Android/android-ndk-r21b
一些常用命令
./vcpkg list xxx:列出已安装包中的xxx,未输入xxx则列出全部;./vcpkg search xxx:搜索已安装包中的xxx;./vcpkg remove xxx:卸载已安装包中的xxx;git pull && ./vcpkg update:更新vcpkg并检查包更新。
覆盖triplet
有时候要指定编译器和对应标准库怎么办呢,完整地更改一般比较麻烦,可以采用覆盖默认triplet的方法,以Linux
clang为例。 1
2
3
4mkdir custom-triplets
cp vcpkg/triplets/x64-linux.cmake custom-triplets/x64-linux-dynamic.cmake
mv custom-triplets/x64-linux-dynamic.cmake custom-triplets/x64-linux.cmake
cp vcpkg/triplets/x64-linux.cmake custom-triplets/x64-linux-clang.cmakecustom-triplets/x64-linux-clang.cmake以匹配以下内容:
1
2
3
4
5
6
7# ~/git/custom-triplets/x64-linux-clang.cmake
set(VCPKG_TARGET_ARCHITECTURE x64)
set(VCPKG_CRT_LINKAGE dynamic)
set(VCPKG_LIBRARY_LINKAGE static)
set(VCPKG_CMAKE_SYSTEM_NAME Linux)
set(VCPKG_CHAINLOAD_TOOLCHAIN_FILE "custom-triplets/clang-toolchain.cmake") #记得改成绝对路径custom-triplets/clang-toolchain.cmake:
1
2
3set(CMAKE_C_COMPILER "/usr/bin/clang")
set(CMAKE_CXX_COMPILER "/usr/bin/clang++")
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -stdlib=libc++ -lc++abi")1
./vcpkg install boost:x64-linux-clang --overlay-triplets=custom-triplets
我用的自定义triplet
见GitHub仓库和同步的Gitee仓库。
一些已知的坑
Mingw
Mingw没有Python和有关包,因为Python官方并不支持Mingw,见此issue。
boost
boost库不能直接输入./vcpkg remove boost,而应该是./vcpkg remove boost-uninstall。
Bug和其他问题提交
上Github vcpkg仓库提issue,官方triplet会及时修bug,社区triplet要足够详细。Port没更新提一下几天之内就会更新。
更多vcpkg可见微软官网教程。