缘起
由于某人之前用c++写了个项目,然后要引boost库(其实就为了个特殊函数),非常麻烦,然后折腾搞vcpkg了,这里把一些经验和大家分享吧。
vcpkg安装与下载
打开vcpkg官网,可以看到Windows、Linux和Mac版安装指南,照上面安装。(因为我没有mac,所以可能要自己读官网文档)
需要安装git和该平台c++编译器(Windows-VS,Linux-g++)。
Windows:
git clone https://github.com/Microsoft/vcpkg.git
.\vcpkg\bootstrap-vcpkg.bat -disableMetricsLinux
git clone https://github.com/Microsoft/vcpkg.git
./vcpkg/bootstrap-vcpkg.sh -disableMetrics安装包
一般安装本平台默认包,直接输入(以boost为例):
./vcpkg install boostWindows是x86-windows(今年改成x64-windows),Linux是x64-linux(都是动态库)。
覆盖初始triplet
现在一般Windows也是64位了,所以一般需要设置环境变量:
VCPKG_DEFAULT_TRIPLET = x64-windows假如只是临时需要安装其他triplet,可以输入:
./vcpkg install boost --triplet=x64-windows-static或者
./vcpkg install boost:x64-windows-staticAndroid(安卓)环境变量设置
编译Android版库,需要设置ANDROID_NDK_HOME环境变量:
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为例。
mkdir 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.cmake并修改custom-triplets/x64-linux-clang.cmake以匹配以下内容:
# ~/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:
set(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")最后输入:(这一步要在custom-triplets的上一级文件夹进行)
./vcpkg install boost:x64-linux-clang --overlay-triplets=custom-triplets我用的自定义triplet
一些已知的坑
Mingw
Mingw没有Python和有关包,因为Python官方并不支持Mingw,见此issue。
boost
boost库不能直接输入./vcpkg remove boost,而应该是./vcpkg remove boost-uninstall。
Bug和其他问题提交
上Github vcpkg仓库提issue,官方triplet会及时修bug,社区triplet要足够详细。Port没更新提一下几天之内就会更新。
更多vcpkg可见微软官网教程。