多应用+插件架构,代码干净,二开方便,首家独创一键云编译技术,文档视频完善,免费商用码云13.8K 广告
[TOC] ### **vcpkg概述** ***** vcpkg是一款再Windows/Linux/MacOS上管理c/c++ lib库的工具。 * Github:[https://github.com/microsoft/vcpkg](https://github.com/microsoft/vcpkg) * Slack:[https://cpplang.now.sh/](https://cpplang.now.sh/), the #vcpkg channel * Docs:[Documentation](https://github.com/microsoft/vcpkg/blob/master/docs/index.md) [TOC] ### **vcpkg安装** ***** 准备条件: * Windows 10, 8.1, 7, Linux, or MacOS * Visual Studio 2015 Update 3 or newer (on Windows) * Git * gcc >= 7 or equivalent clang (on Linux) * *Optional:*CMake 3.12.4 下载源码 执行命令: ``` > git clone https://github.com/Microsoft/vcpkg.git > cd vcpkg PS> .\bootstrap-vcpkg.bat Linux:~/$ ./bootstrap-vcpkg.sh ``` 可以看到vcpkg根目录生成了一个vcpkg/vcpkg.exe文件 vcpkg支持在Powershell和bash中自动完成命令 包名 选项等 要启用tab-completion,请使用以下其中之一: ``` PS> .\vcpkg integrate powershell Linux:~/$ ./vcpkg integrate bash ``` ` ` #### CentOS7遇到问题 devtoolset-7 or devtoolset-8无法编译通过 ![UTOOLS1589161524536.png](https://user-gold-cdn.xitu.io/2020/5/11/172016882a12432a?w=858&h=309&f=png&s=32168) 修改文件./toolsrc/include/vcpkg/packagespec.h : ``` PackageSpec() noexcept = default; to PackageSpec() = default; (line 22)` ; `FullPackageSpec() noexcept = default;to FullPackageSpec() = default; (line 99)`; ``` 升级git ``` yum install curl-devel expat-devel gettext-devel openssl-devel zlib-devel gcc perl-ExtUtils-MakeMaker -y wget https://www.kernel.org/pub/software/scm/git/git-2.9.5.tar.gz tar xzf git-2.9.5.tar.gz cd git-2.9.5 make prefix=/usr/local/git all make prefix=/usr/local/git install echo "export PATH=$PATH:/usr/local/git/bin" >> /etc/bashrc source /etc/bashrc ``` ### **vcpkg 使用** ***** #### 安装/删除/列表 安装 ``` vcpkg install pkgname ``` 删除 ``` vcpkg remove pkgname ``` 列表-已经安装的包 ``` vcpkg list ``` ` ` #### **安装静态库或者动态库设置** 修改文件内容。如果是linux平台,文件路径:./vcpkg/triplets/x64-linux.cmake ``` #静态库 #set(VCPKG_LIBRARY_LINKAGE static) #动态库 #set(VCPKG_LIBRARY_LINKAGE dynamic) ``` ### **Vcpkg和Visual Studio的集成** ***** 上面我们已经安装了一些第三方库,那如何使用呢?常规情况下,我们需要设置include目录、lib目录等,会有很多工作量。Vcpkg提供了一套机制,可以全自动的适配目录,而开发者不需要关心已安装的库的目录在哪里,也不需要设置。这是Vcpkg的一大优势。 #### 集成到全局 “集成到全局”适用于Visual Studio开发环境和msbuild命令行。执行命令: ``` .\vcpkg integrate install ``` 当出现“Applied user-wide integration for this vcpkg root.”字样的时候,说明已经集成成功。这时候可以在任意的工程中使用安装好的第三方库。 #### 移除全局集成 移除全局集成只要执行下列命令即可: ``` .\vcpkg integrate remove ``` ` ` #### 集成到工程 “集成到工程”是整个vcpkg中最复杂的一项,它需要利用Visual Studio 中的nuget插件来实现。我们接下来一步一步来说。 ` ` ##### 生成配置 执行命令 ``` .\vcpkg integrate project ``` 这时候会在“\\scripts\\buildsystems”目录下,生成nuget配置文件. ` ` ##### 基本配置 打开Visual Studio,点击菜单“工具->NuGet包管理器->程序包管理器设置”,进入设置界面,点击“程序包源” ![UTOOLS1587001120317.png](https://user-gold-cdn.xitu.io/2020/4/16/17180a357190150a?w=758&h=494&f=png&s=42891) 点击“加号”增加一个源。修改源的名字为vcpkg。在“源”的选项中点击右侧的”…”选择vcpkg目录下的“scripts\\buildsystems”目录,然后点击右侧的“更新按钮”。 点击“确定”,关闭设置对话框。 到此,全局性的设置已经完成,以后不必再重复设置了。 ##### 工程配置 用Visual Studio 打开一个工程或解决方案。右键点击需要设置的工程,选择“管理NuGet程序包”。在右上角的“程序包源”中选择刚刚设置的“vcpkg”。这样在“浏览”选项卡中就可以看到“vcpkg.H.Repos.vcpkg”。点击最右侧的“安装”。这样就可以集成到某个工程了。 ![UTOOLS1587001504807.png](https://user-gold-cdn.xitu.io/2020/4/16/17180a935137b995?w=1527&h=543&f=png&s=54686) 点击安装即可。 ` ` #### 集成到cmake 通过工具链文件安装库 `scripts\\buildsystems\\vcpkg.cmake`, 用cmake命令行和工具链文件可以安装你想要安装的库 ``` -DCMAKE_TOOLCHAIN_FILE=[vcpkg root]\scripts\buildsystems\vcpkg.cmake ``` 例子: ``` cmake -DBUILD_SHARED_LIBS=OFF -DWITH_DYNAMIC_LOAD=OFF -DWITH_GRPC=OFF -DVCPKG_TARGET_TRIPLET=x64-windows-static -DCMAKE_TOOLCHAIN_FILE="[vcpkg-toot]\\vcpkg\\scripts\\buildsystems\\vcpkg.cmake" <path-to-project> cmake --build . ``` ***** 方法一 在vscode里首选项设置里加入: ``` "cmake.configureArgs":[ "-DCMAKE_TOOLCHAIN_FILE=E:\\idzqj\\Work\\harry\\IM-Server\\vcpkg\\scripts\\buildsystems\\vcpkg.cmake" ] ``` 方法二:在CMakeList.txt文件里加入,需要用再projcect()之前 ``` set(CMAKE_TOOLCHAIN_FILE "D:\vcpkg\scripts\buildsystems\vcpkg.cmake") project(PROJECT_NAME) ``` 方法三 ``` cmake .."-DCMAKE\_TOOLCHAIN\_FILE=D:\\vcpkg-master\\vcpkg\\scripts\\buildsystems\\vcpkg.cmake" -G"Visual Studio 14" ``` #### 集成静态库 Vcpkg默认编译链接的是动态库,如果要链接静态库,目前还没有简便的方法。需要做如下操作 用文本方式打开vcxproj工程文件 在xml的段里面增加如下两句话即可 ``` <VcpkgTriplet>x86-windows-static</VcpkgTriplet> <VcpkgEnabled>true</VcpkgEnabled> ``` 在CMake中集成静态库,需要额外指令 ``` cmake .. -DCMAKE_TOOLCHAIN_FILE=.../vcpkg.cmake -DVCPKG_TARGET_TRIPLET=x86-windows-static ``` ### **使用Vcpkg时的注意点** ***** * Vcpkg仅支持Visual Studio 2015 update 3及以上版本(包括Visual Studio 2017),究其原因,很可能和c++11的支持度以及集成原理有关系。 * 目前Vcpkg编译静态库,默认只支持MT模式。