缘起
由于某人之前用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 -disableMetrics
Linux
git clone https://github.com/Microsoft/vcpkg.git
./vcpkg/bootstrap-vcpkg.sh -disableMetrics
安装包
一般安装本平台默认包,直接输入(以boost为例):
./vcpkg install boost
Windows是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-static
Android(安卓)环境变量设置
编译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可见微软官网教程。