博客参考: https://blog.csdn.net/cjmqas/article/details/79282847#43-%E7%A7%BB%E9%99%A4%E5%85%A8%E5%B1%80%E9%9B%86%E6%88%90 && https://blog.csdn.net/cjmqas/article/details/79282847

vcpkg是命令行包管理工具,在使用第三方库的c或c++开发中可以简化相关的配置操作。vcpkg安装的包支持Visual Studio 2015 update 3及以上版本,包括vs2017工具集,目前在windows平台已有超过900多个包,linux平台超过350个包。在默认情况下,vcpkg会优先使用vs2017进行编译。如果未安装,则使用vs2015编译和安装。使用vcpkg对于c或c++开发,令人烦恼的第三方包管理工作大大的减轻,实则是“居家旅行,必备之品”。

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

这个清单以后随着版本的迭代还会再增加。vcpkg不仅支持x86架构,还支持arm架构。注意:这里的arm架构特指类似于surface这种运行在arm处理器上的Win10平台,而并非我们传统意义上的Linux或android的ARM平台。

安装VCPKG

1. 先安装Git 和 cmake
2. git clone https://github.com/microsoft/vcpkg
3. 编译vcpkg: 执行Vcpkg工程目录下的“bootstrap-vcpkg.bat”命令,即可编译。编译好以后会在同级目录下生成vcpkg.exe文件。编译期间,脚本会自动下载vswhere组件。

注意点:

如果电脑中没有安装cmake 和 powershell,vcpkg会自动下载portable版本的cmake和powershell。但是由于各种原因,下载的网速很慢,所以建议先自行下载安装msi版本的cmakehe powershell。最好是下载最新版本的cmake或者到download目录看一下vcpkg下载的对应版本,之后手动安装或者把源文件压缩包放到download文件夹内。

常见指令

//查看Vcpkg支持的开源库列表
.\vcpkg.exe search //安装库
.\vcpkg.exe install libname 安装过程分为如下过程 1.环境初始化
2.下载源代码(如果已经在cache中,则不下载)
3.校验文件有效性
4.解压缩源代码
5.利用配套工具配置源码工程,在这里是使用的是cmake(如果是ffmpeg,则用msys2)
7.编译源码。一般会同时编译Release和Debug版本。
8.把编译好的文件拷贝到相关目录中去(一般是installed目录) 注意点: 如果电脑中没有安装cmake,vcpkg会自动下载portable版本的cmake。但是由于各种原因,下载的网速很慢,所以建议先自行下载安装msi版本的cmake。最好是下载最新版本的cmake //指定编译某种架构的程序库
如果不指定安装的架构,vcpkg默认把开源库编译成x86的Windows版本的库。那vcpkg总共支持多少种架构呢?我们可以使用如下命令便知
.\vcpkg.exe help triplet arm-uwp
arm-windows
arm64-uwp
arm64-windows
x64-uwp
x64-windows-static
x64-windows
x86-uwp
x86-windows-static
x86-windows .\vcpkg.exe install libcurl:x64-windows //移除一个已经安装(编译)的开源库
.\vcpkg.exe remove jsoncpp 这个时候只是移除了默认的x86-winodws版本的文件,如果有其他平台的版本需要移除,需要制定相应的triplet。
移除也只是移除了二进制程序库而已,源码包和解压缩的源码并没有删除 如果想要一键移除“过时”的包,执行命令:
.\vcpkg.exe remove --outdated
//列出已经安装的开源库
.\vcpkg.exe list //更新已经安装的开源库
一般有两种更新方式。一个是update指令,可以显示可以升级的开源库的列表。另一个是upgrade的指令,会重新编译所有需要更新的包。 //导出已经安装的开源库
有的时候,一个项目组中有很多人,不需要每个人都参与编译。一个人编译好所有开源库后到处给别人即可。有的时候也是出于备份的目的,也会导出已经安装的开源库。导出可以执行export指令。例如,我要导出jsoncpp库,那么执行:
.\vcpkg.exe export jsoncpp --7zip 注意,导出时必须指定导出的包格式。vcpkg支持5种导出包格式,有:
参数 格式
–raw 以不打包的目录格式导出
–nuget 以nuget包形式导出
–ifw 我也不知道这是啥格式
–zip 以zip压缩包形式导出
–7zip 以7z压缩包形式导出 一般地,导出包的格式为:vcpkg-export-<日期>-<时间>
默认情况下只会导出x86-windows的包,如果要导出所有包,那需要制定相应的triplet。比如,如果同时导出x86和x64版本的jsoncpp,那执行命令
.\vcpkg.exe export jsoncpp jsoncpp:x64-windows --7zip 这个命令等价于:
.\vcpkg.exe export jsoncpp:x86-windows jsoncpp:x64-windows --7zip
/导入备份的开源库
.\vcpkg.exe import xxx.7z

Vcpkg和Visual Studio的集成

什么是集成?

上面我们已经安装了一些第三方库,那如何使用呢?常规情况下,我们需要设置include目录、lib目录等,会有很多工作量。Vcpkg提供了一套机制,可以全自动的适配目录,而开发者不需要关心已安装的库的目录在哪里,也不需要设置。这是Vcpkg的一大优势。

集成到全局

“集成到全局”适用于Visual Studio开发环境和msbuild命令行。执行命令:

.\vcpkg integrate install

当出现“Applied user-wide integration for this vcpkg root.”字样的时候,说明已经集成成功。这时候可以在任意的工程中使用安装好的第三方库。

4.3. 移除全局集成

 .\vcpkg integrate remove

4.4. 集成到工程

上面已经可以集成到全局,为什么还要“集成到工程”呢?因为在大部分情况下,我们不希望集成到全局,毕竟有很多第三方库我们希望自定义处理一下,或者干脆不想集成第三方库。那么集成到工程是最灵活的处理方式。也是工程级项目推荐的处理方式。“集成到工程”是整个vcpkg中最复杂的一项,它需要利用Visual Studio 中的nuget插件来实现。我们接下来一步一步来说。

4.4.1. 生成配置

.\vcpkg integrate project

这时候会在“vcpkg_root\scripts\buildsystems”目录下,生成nuget配置文件.

4.4.2. 基本配置

打开Visual Studio,点击菜单“工具->NuGet包管理器->程序包管理器设置”,进入设置界面,点击“程序包源”。

点击“加号”增加一个源。修改源的名字为vcpkg。在“源”的选项中点击右侧的”…”选择vcpkg目录下的“scripts\buildsystems”目录,然后点击右侧的“更新按钮”。

点击“确定”,关闭设置对话框。

到此,全局性的设置已经完成,以后不必再重复设置了。

4.4.3. 工程配置

用Visual Studio 打开一个工程或解决方案。右键点击需要设置的工程,选择“管理NuGet程序包”。在右上角的“程序包源”中选择刚刚设置的“vcpkg”。这样在“浏览”选项卡中就可以看到“vcpkg.H.Repos.vcpkg”。点击最右侧的“安装”。这样就可以集成到某个工程了。

4.5. 集成到CMake

最新的Visual Studio 2015和2017大力支持CMake工程,所以对cmake的支持当然不能少。在cmake中集成只要在cmake文件中加入下面这句话即可。

-DCMAKE_TOOLCHAIN_FILE=/scripts/buildsystems/vcpkg.cmake”

其中是指vcpkg实际所在目录。

那如果要安装编译某一个架构的开源库,我们该怎么写呢?我们只需要在需要安装的包后面指定相应的triplet即可。例如我们需要编译ompl,那么执行如下命令即可。

.\vcpkg install ompl:x64-windows
.\vcpkg install ompl:x86-windows
.\vcpkg install ompl:x86-windows-static

可以分别得到不同编译版本的库

4.6. 集成静态库

Vcpkg默认编译链接的是动态库,如果要链接静态库,目前还没有简便的方法。需要做如下操作

用文本方式打开vcxproj工程文件

2.在xml的段里面增加如下两句话即可

<VcpkgTriplet>x86-windows-static</VcpkgTriplet>
<VcpkgEnabled>true</VcpkgEnabled>

在CMake中集成静态库,需要额外指令

cmake .. -DCMAKE_TOOLCHAIN_FILE=.../vcpkg.cmake -DVCPKG_TARGET_TRIPLET=x86-windows-static

5. 使用Vcpkg时的注意点

  • Vcpkg仅支持Visual Studio 2015 update 3及以上版本(包括Visual Studio 2017),究其原因,很可能和c++11的支持度以及集成原理有关系。
  • 目前Vcpkg编译静态库,默认只支持MT模式。

Visual Studio工具 vcpkg简介的更多相关文章

  1. Visual Studio for Mac 简介

    2016-12-13 Hutchinson 微软中国MSDN 在 11 月举行的 Connect(); 上,Microsoft 将推出 Visual Studio for Mac 预览版.这是一个激动 ...

  2. Visual Studio工具——为编辑器增加垂直辅助线

    原文:<Visual Studio工具> Posted on 2014/03/13 ==================================================== ...

  3. 红豆带你从零学C#系列—Visual Studio工具介绍、下载和安装

    一.Visual Studio的下载 Visual Studio(简称VS)是微软的一套完整的开发工具集,集成了能够开发并运行如C#.C++.VB.F#等程序的开发环境,目前最新的版本是Visual ...

  4. visual studio 工具的使用

    1,快捷键 a, ctrl+e ,ctrl+c 快速注释  ctrl+e ,ctrl+u 取消注释 b,ctrl+k,ctrl+d 快速格式化. 2,开发相关 a,在Microsoft Visual ...

  5. Visual Studio 工具选项设置

    1.显示行号 2.颜色主题 3.显示引用 一 显示行号 1)设置方式:工具-选项-文本编辑器-C#,勾选行号确定 二 颜色主题 1)设置方式:工具-选项-环境-常规,下拉选择:浅色.蓝色.深色,点确定 ...

  6. Visual Studio工具

    下载地址: https://code.visualstudio.com 插件安装: http://blog.csdn.net/u011127019/article/details/53158660 下 ...

  7. 新工具︱微软Microsoft Visual Studio的R语言模块下载试用Ing...(尝鲜)

    笔者:前几天看到了以下的图片,着实一惊.作为R语言入门小菜鸟,还是觉得很好看,于是花了一点时间下载下来试用了一下,觉得还是挺高大上的. 就是英文不好是硬伤.下面贴给小白,我当时的下载步骤与遇见的问题. ...

  8. 用于Azure功能的Visual Studio 2017工具

    今天我们很高兴地宣布发布第一个预览的Visual Studio 2017工具的Azure功能.这个预览介绍了一些令人兴奋的变化,我们以前的版本.此外,除了支持Visual Studio 2017之外, ...

  9. Visual Studio 2015正式版/产品密钥

    Visual Studio 2015  发行说明: https://visualstudio.com/zh-cn/news/vs2015-vs.aspx Visual Studio  2015 特性简 ...

随机推荐

  1. mysql中的隐式转换

    在mysql查询中,当查询条件左右两侧类型不匹配的时候会发生隐式转换,可能导致查询无法使用索引.下面分析两种隐式转换的情况 看表结构 phone为 int类型,name为 varchar EXPLAI ...

  2. Mysql Workbench 连接CentOs MySQL

    系统环境: 计算机ip:192.168.1.105  CentOS+Mysql 远程计算机ip:192.168.1.118  Win7+MySQLWorkbench   登陆服务器:bin/mysql ...

  3. 【linux】linux文件属性权限的介绍

    众所周知,root的信息存在/etc/passwd下,个人密码存在/etc/shadow下,所有组名存在/etc/group下,因此这三个文件十分重要. 在linux系统下,我们可以通过"l ...

  4. oracle数据库死锁的查看及解决

    Oracle常见死锁发生的原因以及解决方法 www.MyException.Cn  网友分享于:2014-09-02  浏览:0次       Oracle常见死锁发生的原因以及解决办法 一,删除和更 ...

  5. WinForm 弹窗

    private void FrmMyShow_Load(object sender, EventArgs e) { Rectangle r = Screen.GetWorkingArea(this); ...

  6. 黄聪:中国大陆的所有IP段,中国电信所有IP段、中国铁通所有IP段、中国网通所有IP段。

    中国大陆的所有IP段,中国电信所有IP段.中国铁通所有IP段.中国网通所有IP段. 中国大陆的所有IP段: 47.153.128.0 47.154.255.25558.14.0.0 58.25.255 ...

  7. linux中强大的screen命令

    今天发现了一个“宝贝”,就是Linux的screen命令,对于远程登录来说,不仅提供了类似于nohup的功能,而且提供了我非常喜欢的“多个桌面”的功能. 平常开一个putty远程登录,经常需要在两个程 ...

  8. Hive中创建结构体、数组以及map

    ROW FORMAT DELIMITED 分隔符设置开始语句 FIELDS TERMINATED BY:设置字段与字段之间的分隔符 COLLECTION ITEMS TERMINATED BY:设置一 ...

  9. 测试Linux端口的连通性的四种方法

    Linux系统有时候需要测试某个端口的连通性,用户可以参考如下方法来测试.   方法一.telnet法 telnet为用户提供了在本地计算机上完成远程主机工作的能力,因此可以通过telnet来测试端口 ...

  10. python Flask篇(一)

    MarkdownPad Document *:first-child { margin-top: 0 !important; } body>*:last-child { margin-botto ...