概述
vcpkg是微软开发的在Windows, Linux和MacOS平台管理C/C++库的开源工具。
快速开始
要求
使用vcpkg需满足如下条件:
- Windows 10, 8.1, 7, Linux, or MacOS
- Visual Studio 2017 or Visual Studio 2015 Update 3 (on Windows)
- Git
- CMake 3.10.2 (optional)
安装vcpkg
1 | > git clone https://github.com/Microsoft/vcpkg |
为了让计算机的所有用户都可以使用vcpkg,运行如下命令(首次运行需管理员权限):1
2PS> .\vcpkg integrate install
Ubuntu:~/$ ./vcpkg integrate install
安装库
通过如下命令便可以安装库:1
2PS> .\vcpkg install sdl2 curl
Ubuntu:~/$ ./vcpkg install sdl2 curl
如果你在安装库时下载速度非常慢甚至下载失败,可以拷贝下载链接自行下载好库的压缩包,然后放在downloads
文件夹,这样vcpkg
便直接使用下载好的库来编译安装。
安装不同配置的库
1 | .\vcpkg install ceres:x32-windows |
选择库的模块安装
对于有些库,默认可能不是所有的依赖都安装,如ceres-solver,默认不支持suitesparse
,cxsparse
,此时可以通过下面命令重新安装
1 | .\vcpkg install ceres[suitesparse,cxsparse]:x64-windows --recurse |
其中--recurse
表示可以卸载之前的库。更多install参数可以通过命令.\vcpkg help install
查看。
再比如支持cuda的opencv版本,可以通过下面命令来安装。1
.\vcpkg install opencv[cuda]:x64-windows
卸载vcpkg
直接删除vcpkg的文件夹即可。
vcpkg命令
vcpkg help
: 帮助vcpkg search
: 搜索库vcpkg install
: 安装库
对于Windows
平台.\vcpkg install openmesh:x86-windows
:安装32位库.\vcpkg install openmesh:x64-windows
:安装64位库.\vcpkg install openmesh:x64-windows-static
安装64位静态库
vcpkg list
:列出所有已经安装的库vcpkg upgrade
:列出所有可以升级的库,如果需要升级,需额外添加--no-dry-run
命令vcpkg update
vcpkg remove
:移除某个已经安装的库,如果需要移除依赖该库的其他库,添加--recurse
命令
vcpkg文件夹构成
- buildtrees — contains subfolders of sources from which each library is built
- docs — documentation and examples
- downloads — cached copies of any downloaded tools or sources. vcpkg searches here first when you run the install command
- installed— Contains the headers and binaries for each installed library. When you integrate with Visual Studio, you are essentially telling it add this folder to its search paths
- packages — Internal folder for staging between installs
- ports — Files that describe each library in the catalog, its version, and where to download it. You can add your own ports if needed
- scripts — Scripts (cmake, powershell) used by vcpkg
- toolsrc — C++ source code for vcpkg and related components
- triplets — Contains the settings for each supported target platform (for example, x86-windows or x64-uwp)
vcpkg更新
在vcpkg根目录下的ports文件夹中可以看到当前版本包含的所有库,但由于vcpkg项目正在活跃开发中,有时候有些库在你当前的版本中并没有加入,这时可以考虑更新vcpkg。首先拉取vcpkg的远程仓库,更新本地仓库:1
2
3
4git fetch origin master:temp // 从远程的origin仓库的master分支下载到本地并新建一个分支temp
git diff temp // 比较本地的仓库和远程仓库的区别
git merge temp // 合并temp分支到master分支
git branch -d temp // 如果不想要temp分支了,可以删除此分支
然后重新编译生成vcpkg.exe工具1
2PS> .\bootstrap-vcpkg.bat
Linux:~/$ ./bootstrap-vcpkg.sh
然后可以通过命令.\vcpkg update
.\vcpkg upgrade
更新已经安装好的库。再通过install
命令安装新的库。
vcpkg更改设置
默认安装库类型
对于Windows
平台,vcpkg
默认安装32位库,如果想要设置为默认安装64位库,在环境变量中加上VCPKG_DEFAULT_TRIPLET=x64-windows
即可。
默认使用库类型
如果需要指定使用64位静态库,可以在cmake命令中加入-DVCPKG_TARGET_TRIPLET=x64-windows-static
实现,或者在CMakeLists.txt文件的project命令之前加入
1 | set(VCPKG_TARGET_TRIPLET "x64-windows-static") |
vcpkg使用
CMake
在CMake中使用通过vcpkg安装的库的最佳方式是通过工具链文件 (toolchain file) scripts/buildsystems/vcpkg.cmake
,让安装的库通过find_package()
被发现。
要使用这个文件,只需通过命令-DCMAKE_TOOLCHAIN_FILE=[vcpkg root]/scripts/buildsystems/vcpkg.cmake
将其加入CMake命令行中即可。例如1
2cmake .. -DCMAKE_TOOLCHAIN_FILE=vcpkg/scripts/buildsystems/vcpkg.cmake (Linux/MacOS)
cmake .. -DCMAKE_TOOLCHAIN_FILE=vcpkg\scripts\buildsystems\vcpkg.cmake (Windows)
再比如,如果要用VS2017编译器,输入下面命令即可:1
cmake .. -DCMAKE_TOOLCHAIN_FILE=D:\vcpkg\scripts\buildsystems\vcpkg.cmake -G "Visual Studio 15 2017 Win64"
还有一种方法,直接在CMakeLists.txt
文件中指定CMAKE_TOOLCHAIN_FILE
,即1
2set(CMAKE_TOOLCHAIN_FILE "D:\vcpkg\scripts\buildsystems\vcpkg.cmake")
project(PROJECT_NAME)
这里需要注意的是,设置CMAKE_TOOLCHAIN_FILE
要在project()
命令之前。另外多说一句,类似CMAKE_TOOLCHAIN_FILE
, CMAKE_SYSTEM_NAME
, CMAKE_C_COMPILER
等这些变量都要在project()
命令之前设定,不然CMake
仍然会按照默认的设置来。
VisualStudio
在VS中,所有已经安装的库都被VS项目自动包含(通过前面提到的vcpkg integrate install
命令实现),无需配置便可直接使用。
CLion
在CLion中的配置如下File -> Settings -> Build, Execution, Deployment -> CMake,在CMake Options中添加-DCMAKE_TOOLCHAIN_FILE=[vcpkg root]/scripts/buildsystems/vcpkg.cmake