概述

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

> git clone https://github.com/Microsoft/vcpkg
> cd vcpkg PS> .\bootstrap-vcpkg.bat
Ubuntu:~/$ ./bootstrap-vcpkg.sh

为了让计算机的所有用户都可以使用vcpkg,运行如下命令(首次运行需管理员权限):

PS> .\vcpkg integrate install
Ubuntu:~/$ ./vcpkg integrate install

安装库

通过如下命令便可以安装库:

PS> .\vcpkg install sdl2 curl
Ubuntu:~/$ ./vcpkg install sdl2 curl

对于Windows平台,vcpkg默认安装32位库,如果想要设置为默认安装64位库,在环境变量中加上VCPKG_DEFAULT_TRIPLET=x64-windows即可。

如果你在安装库时下载速度非常慢甚至下载失败,可以拷贝下载链接自行下载好库的压缩包,然后放在downloads文件夹,这样vcpkg便直接使用下载好的库来编译安装。

对于有些库,默认可能不是所有的依赖都安装,如ceres-solver,默认不支持suitesparse,cxsparse,此时可以通过命令.\vcpkg install ceres[suitesparse,cxsparse]:x64-windows --recurse重新安装,其中--recurse表示可以卸载之前的库。更多install参数可以通过命令.\vcpkg help install查看。

再比如支持cuda的opencv版本,可以通过命令.\vcpkg install opencv[cuda]:x64-windows来安装。

卸载vcpkg

直接删除vcpkg的文件夹即可。

使用库

CMake

在CMake中使用通过vcpkg安装的库的最佳方式是通过工具链文件(toolchain file) scripts/buildsystems/vcpkg.cmake,让安装的库通过find_package()被发现。

要使用这个文件,只需通过命令-DCMAKE_TOOLCHAIN_FILE=[vcpkg root]/scripts/buildsystems/vcpkg.cmake将其加入CMake命令行中即可。例如

cmake .. -DCMAKE_TOOLCHAIN_FILE=vcpkg/scripts/buildsystems/vcpkg.cmake (Linux/MacOS)
cmake .. -DCMAKE_TOOLCHAIN_FILE=vcpkg\scripts\buildsystems\vcpkg.cmake (Windows)

再比如,如果要用VS2017编译器,输入下面命令即可:

cmake .. -DCMAKE_TOOLCHAIN_FILE=D:\vcpkg\scripts\buildsystems\vcpkg.cmake -G "Visual Studio 15 2017 Win64"

还有一种方法,直接在CMakeLists.txt文件中指定CMAKE_TOOLCHAIN_FILE,即

set(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

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的远程仓库,更新本地仓库:

git fetch origin master:temp  // 从远程的origin仓库的master分支下载到本地并新建一个分支temp
git diff temp // 比较本地的仓库和远程仓库的区别
git merge temp // 合并temp分支到master分支
git branch -d temp // 如果不想要temp分支了,可以删除此分支

然后重新编译生成vcpkg.exe工具

PS> .\bootstrap-vcpkg.bat
Linux:~/$ ./bootstrap-vcpkg.sh

然后可以通过命令.\vcpkg update .\vcpkg upgrade更新已经安装好的库。再通过install命令安装新的库。

参考

Tips for vcpkg的更多相关文章

  1. clion结合vcpkg以及GTest的使用

    目录 一.vcpkg简介.下载和使用 1. vcpkg是什么 2. vcpkg下载 3. 使用vcpkg下载第三方库 二.clion结合vcpkg 1. 方法一:使用环境变量 2. 方法二:添加cma ...

  2. Mac上MySQL忘记root密码且没有权限的处理办法&workbench的一些tips (转)

    忘记Root密码肿么办 Mac上安装MySQL就不多说了,去mysql的官网上下载最新的mysql包以及workbench,先安装哪个影响都不大.如果你是第一次安装,在mysql安装完成之后,会弹出来 ...

  3. 【Tips】史上最全H1B问题合辑——保持H1B身份终级篇

    [Tips]史上最全H1B问题合辑——保持H1B身份终级篇 2015-04-10留学小助手留学小助手 留学小助手 微信号 liuxue_xiaozhushou 功能介绍 提供最真实全面的留学干货,帮您 ...

  4. layer.js中layer.tips

    <script src="~/Content/js/layer/layer.js"></script> layer.tips('名称不能为空', '#pro ...

  5. HTML 最简单的tips 怎么支持指定DIV显示提示信息

    <body> <style type="text/css"> a.link{position:relative;} a.link div.tips{ bor ...

  6. CSS:CSS使用Tips

    Css是前端开发中效果展现的主要部分之一,良好的Css书写习惯可以为实际的项目开发提高效率,也可以为实现良好的团队合作提供保证. 一般新手在使用Css的时候经常会犯一些错误,出现一些不经意的漏洞,如果 ...

  7. 【读书笔记】100个Switf必备tips

    声明 欢迎转载,但请保留文章原始出处:)  博客园:http://www.cnblogs.com 农民伯伯: http://over140.cnblogs.com 正文 1.Selector 在Swi ...

  8. 【转】40个良好用户界面Tips

    一个良好的用户界面应具有高转换率,并且易于使用.但要用户体验良好并不容易做到,下面我们整理了40个良好用户界面Tips,希望能对你有帮助! 1 尽量使用单列而不是多列布局 单列布局能够让对全局有更好的 ...

  9. 转:Eclipse Search Tips

    from:  https://github.com/ajermakovics/eclipse-instasearch/wiki/Eclipse-search-tips Eclipse Search T ...

随机推荐

  1. socket常见选项之SO_REUSEADDR,SO_REUSEPORT

    目录 SO_REUSEADDR time-wait SO_REUSEPORT SO_REUSEADDR 一般来说,一个端口释放后会等待两分钟之后才能再被使用,SO_REUSEADDR是让端口释放后立即 ...

  2. go 变量的定义方式

    var a int a = 1 var a,b int a =1 b = 2 var a,b = 1,2 var s string = "hello world" a, b := ...

  3. CF480E Parking Lot(two-pointers + 单调队列优化)

    题面 动态加障碍物,同时查询最大子正方形. n,m≤2000n,m\leq2000n,m≤2000 题解 加障碍不好做,直接离线后反着做,每次就是清除一个障碍物. 显然倒着做答案是递增的,而且答案的值 ...

  4. Mybatis延迟加载, 一级缓存、二级缓存

    延迟加载 概念:MyBatis中的延迟加载,也称为懒加载,是指在进行关联查询时,按照设置延迟规则推迟对关联对象的select查询.延迟加载可以有效的减少数据库压力. (注意:MyBatis的延迟加载只 ...

  5. 使用Costura.Fody插件将自己写的程序打包成一个可以独立运行的EXE文件

    我们在开发程序的时候会引用很多DLL文件,在程序完成编写后,如果不把这些引用的DLL打包,不能在其他电脑运行,那么很多同学可能在想了,能不能把我们编写好的程序打包成一个EXE文件,最好双击就能运行,当 ...

  6. LaTex编译时出错:PK font *** could not be created

    参考https://blog.csdn.net/dancing11/article/details/60978642 在用TeXworks (Miktex) 编译OSA投稿模板时,遇到错误PK fon ...

  7. Zotero使用教程(1)-安装及配置

    小书匠kindle   作为一名科研人员,经常要阅读大量文献(当然我收集>>阅读,哎!),收集来的文献一般我们使用文件夹管理,通常使用文件夹命名和层级分布解决论文的分类问题.   但是,实 ...

  8. 【原创】go语言学习(八)切片

    目录: 切片定义 切片基本操作 切片传参 make和new的区别 切片定义 1. 切片是基于数组类型做的一层封装.它非常灵活,可以自动扩容. var a []int //定义一个int类型的空切⽚ 2 ...

  9. python快捷键的使用【摘抄】

    接触python有些快捷键还不熟悉,搜索到下面这个文章很好的转发和摘抄了,感谢作者的用心分析 摘抄来源:https://www.cnblogs.com/haiyan123/p/7170593.html ...

  10. mac 安装 mysql 5.7

    下载 https://dev.mysql.com/downloads/mysql/5.7.html#downloads 下一步,经过一系列安装步骤后,会跳出一个这样的界面,请注意!!! 上面红框中是你 ...