Visual Studio工具 vcpkg简介

博客参考: http://www.javashuo.com/article/p-aqtbmsbu-ho.html && http://www.javashuo.com/article/p-aqtbmsbu-ho.htmllinux

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

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-staticc++

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

安装VCPKGgithub

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

注意点:shell

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

常见指令bootstrap

//查看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的一大优点。windows

集成到全局

“集成到全局”适用于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模式。
相关文章
相关标签/搜索