vcpkg

Wesley13
• 阅读 940

  vcpkg-VC++打包工具

1. 介绍

  VCPKG,是VC++ Packaging Tool。 是微软 C++ 团队开发的在 Windows 上运行的 C/C++ 项目包管理工具,可以帮助您在 Windows 平台上获取 C 和 C++ 库.通过它能够方便的安装常用的 C/C++ 库,而且提供了 CMake 的集成。这使得使用 CMake 的项目在 Windows 下构建方便了很多,不需要自己手动去指定在 Windows 下如何找到依赖的库了。

  vcpkg 自身也是使用 C++ 开发的 (而其他的 C++ 包管理大多并不是 C++ 开发的),并且 vcpkg 能够帮助用户在 Visual Studio 中,更好的使用这些安装好的库.

  不过实际使用中还是碰到一些问题。为了减少依赖,直接复制一个可执行程序就能在其它机器上运行,经常会需要静态链接依赖的库。而在 Windows 上使用 vcpkg 静态链接需要一些特殊的操作。

  vcpkg 整合了 git,构建系统整合的 CMake,而绝大多数的 C++ 项目都可以直接或者间接的方式使用 CMake创建原生项目文件并构建.

vcpkg遵循一下原则:

  • 开放源码

  • 无需安装

  • 支持重发构建

  • 自定义生成

  • 社区参与贡献

  • 端口集成(与 BSD Ports 机制类似)

  vcpkg是命令行包管理工具,在使用第三方库的c或c++开发中可以简化相关的配置操作

  vcpkg安装的包支持vs2015和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。

2. vcpkg的常用操作:

# 下载vcpkg项目
git clone https://github.com/Microsoft/vcpkg

# 本地编译
bootstrap-vcpkg.bat

# 搜索想要安装的包
vcpkg search curl

# 安装指定的包,curl包分号后面的表示架构,可用的值为之前列出的那些。
vcpkg install curl:x64-windows

# 列出已经安装的包
vcpkg list

# 已安装的包更新
vcpkg upgrade

# 删除已安装的包
vcpkg remove curl:x64-windows

3. 简单使用

  依赖要求:

使用vcpkg, 要提前保证系统各种有以下:

  • Windows 10, 8.1, 7, Linux, or MacOS
  • Visual Studio 2017 or Visual Studio 2015 Update 3 (on Windows)
  • Git
  • Optional: CMake 3.10.2

   (1)将git.exe 路径防止在系统的path变量中。

  (2)克隆vcpkg仓库

 git clone https://github.com/Microsoft/vcpkg.git

  然后运行:

        C:\src\>cd vcpkg

        C:\src\vcpkg>.\bootstrap-vcpkg.bat

  (3)切换到源代码路径,执行构造

powershell -exec bypass scripts\bootstrap.ps1

  (4)设定user-wide整合(初次执行需要管理员权限)

  然后,运行如下命令使计算机的所有用户都可以使用vcpkg (备注:需要管理员权限)

vcpkg.exe integrate install

  或者如下执行:

PS D:\vcpkg> .\vcpkg integrate install
Applied user-wide integration for this vcpkg root.

All MSBuild C++ projects can now #include any installed libraries.
Linking will be handled automatically.
Installing new libraries will make them instantly available.

CMake projects should use: "-DCMAKE_TOOLCHAIN_FILE=D:/vcpkg/scripts/buildsystems/vcpkg.cmake"

  (5)安装库

  使用vcpkg安装任何的程序包:   C:\src\vcpkg> .\vcpkginstall sdl2 curl

vcpkg.exe install sqlite3 boost

  (6)最后,后,在Visual Studio 2015 or Visual Studio 2017中新建工程,只需要 #include 对应的头文件即可使用。

特点:

(1)免配置
  无需配置include、library路径,无需配置library依赖,自动识别win32/x64

(2)自动复制依赖

  如果依赖于某个library,则运行/打包时需要复制dll到对应路径,而Vcpkg会自动完成这一步骤

3. 简单实例,如何安装sqlite步骤

(1)查询sqlit的名称

vcpkg.exe search sqlite
libodb-sqlite        2.4.0            Sqlite support for the ODB ORM library
sqlite3              3.15.0           SQLite is a software library that implements a se...
 
If your library is not listed, please open an issue at:
    https://github.com/Microsoft/vcpkg/issues

(2)安装sqlite3

vcpkg.exe install sqlite3

(3)确认是否安装成功

vcpkg.exe list

4. 指定特定版本的SQlit库

  安装64位版本

vcpkg.exe install sqlite3:x64-windows

6. 使用 sqlit

(1) 打开Visual Studio 2015 新建工程,main.cpp如下

#include <sqlite3.h>
#include <stdio.h>
 
int main(int argc,char** argv)
{
    printf("%s\n",sqlite3_libversion()):
    return 0;
}

(2)编译运行

  • 是否支持Visual Studio 2010 ?
    否,后续我会介绍Vcpkg用到的“知识点”,可以为Visual Studio 2010开发相应工具提供借鉴。

  • 是否支持静态编译库
    是,例如vcpkg.exe install **xxx:x86-windows-static**

  • 没有我需要的库怎么办
    自己写

endl;

点赞
收藏
评论区
推荐文章
blmius blmius
3年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
皕杰报表之UUID
​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为
Jacquelyn38 Jacquelyn38
3年前
2020年前端实用代码段,为你的工作保驾护航
有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )
Stella981 Stella981
2年前
Opencv中Mat矩阵相乘——点乘、dot、mul运算详解
Opencv中Mat矩阵相乘——点乘、dot、mul运算详解2016年09月02日00:00:36 \牧野(https://www.oschina.net/action/GoToLink?urlhttps%3A%2F%2Fme.csdn.net%2Fdcrmg) 阅读数:59593
Wesley13 Wesley13
2年前
mysql设置时区
mysql设置时区mysql\_query("SETtime\_zone'8:00'")ordie('时区设置失败,请联系管理员!');中国在东8区所以加8方法二:selectcount(user\_id)asdevice,CONVERT\_TZ(FROM\_UNIXTIME(reg\_time),'08:00','0
Wesley13 Wesley13
2年前
00:Java简单了解
浅谈Java之概述Java是SUN(StanfordUniversityNetwork),斯坦福大学网络公司)1995年推出的一门高级编程语言。Java是一种面向Internet的编程语言。随着Java技术在web方面的不断成熟,已经成为Web应用程序的首选开发语言。Java是简单易学,完全面向对象,安全可靠,与平台无关的编程语言。
Stella981 Stella981
2年前
Django中Admin中的一些参数配置
设置在列表中显示的字段,id为django模型默认的主键list_display('id','name','sex','profession','email','qq','phone','status','create_time')设置在列表可编辑字段list_editable
Stella981 Stella981
2年前
Google地球出现“无法连接到登录服务器(错误代码:c00a0194)”解决方法
Google地球出现“无法连接到登录服务器(错误代码:c00a0194)”解决方法参考文章:(1)Google地球出现“无法连接到登录服务器(错误代码:c00a0194)”解决方法(https://www.oschina.net/action/GoToLink?urlhttps%3A%2F%2Fwww.codeprj.com%2Fblo
Wesley13 Wesley13
2年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
Python进阶者 Python进阶者
8个月前
Excel中这日期老是出来00:00:00,怎么用Pandas把这个去除
大家好,我是皮皮。一、前言前几天在Python白银交流群【上海新年人】问了一个Pandas数据筛选的问题。问题如下:这日期老是出来00:00:00,怎么把这个去除。二、实现过程后来【论草莓如何成为冻干莓】给了一个思路和代码如下:pd.toexcel之前把这