vcpkg使用详解
vcpkg是命令行包管理工具,在使用第三方库的c或c++开发中可以简化相关的配置操作。vcpkg安装的包支持vs2015和vs2017工具集,目前在windows平台已有超过900多个包,linux平台超过350个包。在默认情况下,vcpkg会优先使用vs2017进行编译。如果未安装,则使用vs2015编译和安装。使用vcpkg对于c或c++开发,令人烦恼的第三方包管理工作大大的减轻,实则是“居家旅行,必备之品”。
vcpkg的安装和常用操作
vcpkg支持众多架构,有arm-uwp, arm-windows, arm64-uwp, arm64-windows, x64-linux, x64-osx, x64-uwp, x64-windows, x64-windows-static, x86-uwp, x86-windows, x86-windows-static。 下面我已curl包为事例,介绍vcpkg的安装和使用。
# 下载vcpkg项目
git clone https://github.com/Microsoft/vcpkg
# 本地编译
bootstrap-vcpkg.bat
# 搜索想要安装的包
vcpkg search curl
# 安装指定的包,curl包分号后面的表示架构,可用的值为之前列出的那些。
vcpkg install curl:x64-windows
# 列出已经安装的包
vcpkg list
# 已安装的包更新
vcpkg upgrade
# 删除已安装的包
vcpkg remove curl:x64-windows
visual studio 2017中使用vcpkg安装的包
要在visual studio 2017中正确使用已安装的包,需要将头文件目录和相关的库在正确的设置。方便的是,vcpkg提供了直接的配置命令。
# 为每一个用户设置
vcpkg integrate install
# 为当前项目配置,这里需要在该项目的目录下拥有一份vcpkg的拷贝
vcpkg integrate project
正确配置之后,不用做任何项目的其它设置,可以直接在项目中使用,效果如下图。
vcpkg使用中的常见问题
vcpkg和cmake合作使用时,明明CMakefile编写正确,但是却一直找不到第三方引用呢?
面对这种情况需要从以下几个方面去排查。第一,CMAKE_TOOLCHAIN_FILE是否设置为了vcpkg.cmake文件路径了?如果设置了的话,是否是在project()命令之前,因为如果在project命令之后的话就无效了。第二,对vcpkg.cmake预设好的变量是否进行了覆盖操作?我之前就放过错误,将vcpkg.cmake中预设的变量CMAKE_PREFIX_PATH覆盖,结果导致无法引入第三方包的问题