VcPkg & MinGW GCC

VCpkg 开源库管理工具

Windows 下开发 C/C++ 程序,少不了编译开源的第三方库。比如用于网络连接的高性能库 libcurl、用于压缩解压的 zlib 等等。使用这些库开发极大的方便了程序员,使得我们不必重复造轮子。由于这些开源库绝大部分都来源于 Linux 系统,其工程文件、编译系统都使用 gnu 系列工具,使得将其移植到 Windows 的 VC 开发环境下一直是难点。

还需要考虑预先编译出哪种类型的开源库程序,比如:Debug 还是 Release、动态库还是静态库、MD 还是 MT、32 位还是 64 位。光是这三种组合就有 16 种可能性。如果像 libcurl 这种还要考虑是否引用其他开源库的功能,那么编译类型的组合会更多。

VCpkg 就是解决这个问题的:

自动调用 git 等工具下载开源库源代码;

源码包的缓存管理和版本管理,可以升级版本;

紧密结合 CMake 轻松编译;

依赖关系检查,比如编译 libcurl,会自动下载 zlib、openssl 进行编译;

无缝集成 Visual Studio,不需要设置库文件、头文件的所在目录,自动集成。

Visual Studio 全平台支持,支持 Debug/Release、x86/x64 编译,还支持 UWP、ARM 平台的编译。

一般使用流程:

执行 vcpkg 安装模块,等待编译动作完成;

执行 vcpkg integrate 集成到项目或者 Visual Studio,又或者全局集成;

在代码中通过头文件使用安装好的模块;

vcpkg 主目录文件夹结构:

| buildtrees | 所有下载好的 library 源代码和构建目录 |

| docs | 文档与示例 |

| downloads | 下载缓冲文件夹,执行安装命令时会先查询这里 |

| installed | 包含安装好的 library 头文件和编译文件 |

| packages | 内部文件夹,在安装时用到 |

| ports | 包含分类中的库描述文件,包含版本、下载地址等 |

| scripts | 脚本目录,如 cmake, powershell 脚本 |

| toolsrc | VcPkg C++ 源代码和组件 |

| triplets | 包含支持架构配置文件,如 x86-windows、x64-uwp |

vcpkg 安装依赖模块的基本执行流程:

环境初始化

下载源代码,如果已经在 cache 中,则跳过下载环节

校验文件有效性

解压缩源代码

利用配套工具配置源码工程,如 cmake,如果是 ffmpeg 则用 msys2

执行 MSBuild 编译源码,一般会同时编译 Release 和 Debug 版本。

把编译好的文件拷贝到相关目录中去,一般是 installed 目录

如果没有在 vcpkg 主目录运行,可能会遇到 Error: Could not detect vcpkg-root。

使用 PowerShell 执行 Vcpkg 工程目录下的 bootstrap-vcpkg.bat 进行编译,会在同级目录下生成 vcpkg.exe 文件。

命令使用示范:

>vcpkg --help

Commands:

vcpkg search [pat] Search for packages available to be built

vcpkg install ... Install a package

vcpkg remove ... Uninstall a package

vcpkg remove --outdated Uninstall all out-of-date packages

vcpkg list List installed packages

vcpkg update Display list of packages for updating

vcpkg upgrade Rebuild all outdated packages

vcpkg x-history (Experimental) Shows the history of CONTROL versions of a package

vcpkg hash [alg] Hash a file by specific algorithm, default SHA512

vcpkg help topics Display the list of help topics

vcpkg help Display help for a specific topic

vcpkg integrate install Make installed packages available user-wide. Requires admin

privileges on first use

vcpkg integrate remove Remove user-wide integration

vcpkg integrate project Generate a referencing nuget package for individual VS project use

vcpkg integrate powershell Enable PowerShell tab-completion

vcpkg export ... [opt]... Exports a package

vcpkg edit Open up a port for editing (uses %EDITOR%, default 'code')

vcpkg import Import a pre-built library

vcpkg create [archivename]

Create a new package

vcpkg owns Search for files in installed packages

vcpkg depend-info ... Display a list of dependencies for packages

vcpkg env Creates a clean shell environment for development or compiling

vcpkg version Display version information

vcpkg contact Display contact information to send feedback

...

>vcpkg search assimp

>vcpkg search | findstr assimp

assimp 5.0.1 The Open Asset import library

magnum-plugins[assimpimporter] AssimpImporter plugin

>vcpkg search | findstr glu

aws-sdk-cpp[glue] C++ SDK for the AWS glue service

freeglut 3.2.1-4 Open source implementation of GLUT with source and binary backwards compatibil...

glui 2019-11-30 GLUI is a GLUT-based C++ user interface library

mathgl[glut] glut module

>vcpkg install assimp:

Computing installation plan...

The following packages will be built and installed:

assimp[core]:x86-windows

* minizip[core]:x86-windows

* rapidjson[core]:x86-windows

* zlib[core]:x86-windows

Additional packages (*) will be modified to complete this operation.

Warning: The following VS instances are excluded because the English language pack is unavailable.

C:\Program Files (x86)\Microsoft Visual Studio\2019\Community

Please install the English language pack.

安装具有 Cuda 加速的 opencv 库:

vcpkg search opencv

vcpkg install opencv[cuda]:x64-windows

vcpkg --triplet x64-windows install opencv[cuda]

支持的架构组合查询:

>vcpkg help triplet

VCPKG built-in triplets

VCPKG community triplets

arm-uwp

arm-ios

arm64-windows

arm-mingw

x64-linux

arm-windows

x64-osx

arm64-ios

x64-uwp

arm64-mingw

x64-windows-static

arm64-uwp

x64-windows

arm64-windows-static

x86-windows

wasm32-emscripten

x64-ios

x64-mingw

x64-osx-dynamic

x64-windows-static-md

x86-ios

x86-mingw

x86-uwp

x86-windows-static-md

x86-windows-static

作为 MinGW 的用户,我非愿意看到 triplet 列表中有 x64-mingw 和 x86-mingw 的身影。

可以设置默认的架构:

VCPKG_DEFAULT_TRIPLET=x64-windows

vcpkg 的 Triplet files 是用来记录和库相关的 OS、CPU、Compiler、Runtime 等信息的文件,它包含了编译模块时使用的工具链。

安装第三方的 MinGW 架构依赖库时出现错误:

>vcpkg install assimp:x64-mingw

Computing installation plan...

The following packages will be built and installed:

assimp[core]:x64-mingw

* minizip[core]:x64-mingw

* rapidjson[core]:x64-mingw

* zlib[core]:x64-mingw

Additional packages (*) will be modified to complete this operation.

Unable to determine toolchain to use for triplet x64-mingw with CMAKE_SYSTEM_NAME MinGW

提示信息表明,vcpkg 无法从 CMAKE_SYSTEM_NAME 指定的 x64-mingw 架构确定需要用到的工具链:

triplets/community/x64-mingw.cmake

这个问题有点恶心,因为 vcpkg 的源代码忽略了 MinGW,解决方法是修改 build.cpp 重新编译 vcpkg:

diff --git a/toolsrc/src/vcpkg/build.cpp b/toolsrc/src/vcpkg/build.cpp

index c61c6b7..d7c78aa 100644

--- a/toolsrc/src/vcpkg/build.cpp

+++ b/toolsrc/src/vcpkg/build.cpp

@@ -558,6 +558,10 @@ namespace vcpkg::Build

else if (cmake_system_name == "Android")

{

return m_paths.scripts / fs::u8path("toolchains/android.cmake");

+ }

+ else if (cmake_system_name == "MinGW")

+ {

+ return m_paths.scripts / fs::u8path("toolchains/mingw.cmake");

}

else if (cmake_system_name.empty() || cmake_system_name == "Windows" || cmake_system_name == "WindowsStore")

{

--

安装好依赖模块后,接着是将 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=C:/vcpkg/scripts/buildsystems/vcpkg.cmake"

使用 CMake 的编译项目中使用 vcpkg 安装的库,最佳方式指定 CMake (Toolchain File) 工具链文件 scripts/buildsystems/vcpkg.cmake,让 find_package() 命令发现安装的库。

要使用这个文件,通过命令参数传入 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)

注意,要在 project() 命令之前设置。另外,类似 CMAKE_SYSTEM_NAME,CMAKE_C_COMPILER 等这些变量都要在 project()命令之前设定,不然 CMake 会按照默认的设置处理。

如果电脑中没有安装 cmake,vcpkg 会自动下载 cmake portable 版本。

集成安装:

命令

说明

vcpkg integrate install

为所有用户集成安装依赖包

vcpkg integrate remove

为所有用户移除集成安装

vcpkg integrate project

为独立 VS 项目创建 nuget 包引用

vcpkg integrate powershell

为 PowerShell Tab 自动完成集成

----------------------------

---------------------------------

依赖包的管理:

vcpkg.exe remove assimp

vcpkg.exe remove --outdated

vcpkg.exe list

vcpkg.exe export assimp --7zip

导出时必须指定导出的包格式。vcpkg支持5种导出包格式,有:

参数

格式

–raw

以不打包的目录格式导出

–nuget

以 nuget 包形式导出

–ifw

基于 IFW 的安装包

–zip

以 zip 压缩包形式导出

–7zip

以 7z 压缩包形式导出

vcpkg下载mysql库_VCpkg 开源库管理工具相关推荐

  1. mac版mysql workbench_MySQL Workbench for mac下载-MySQL Workbench for mac(数据库工具) v8.0.16特别版 - Mac天空...

    MySQL Workbench提供了创建复杂RT模型,正向和反向工程或从简单且用户友好的界面执行各种管理和文档任务所需的所有必需工具.MySQL Workbench可以帮助您轻松管理,建模,生成和设计 ...

  2. visual studio2019+vcpkg管理第三方库(含使用Git管理工具下载vcpkg方法,已解决)

    问题简述 通常在使用vs做项目的时候要用到一些第三方库,我在学习Eigen的过程中由于没有安装第三方库便遇到了这样的一个问题: 无法打开源文件"eigen3/Eigen/Dense" ...

  3. Sqoop是一款开源的工具,主要用于在HADOOP(Hive)与传统的数据库(mysql、oracle...)间进行数据的传递...

    http://niuzhenxin.iteye.com/blog/1706203 Sqoop是一款开源的工具,主要用于在HADOOP(Hive)与传统的数据库(mysql.postgresql...) ...

  4. java mysql工具_Java开源数据库管理工具

    SQuirreL SQL Client SQuirreL SQL Client 是一个用 Java 编写的程序,它允许您查看数据库的内容.发出 SQL 命令,以及如您将看到的,执行许多其他功能.构建该 ...

  5. java部署工具下载_Walle部署工具-Walle(开源部署工具)下载 v2.0.1官方版--pc6下载站...

    Walle开源部署工具是一款免费开源的上线部署平台,Walle开源部署工具支持各种web代码发布,php.java等代码的发布.回滚可以通过web来一键完成.walle更人性化,高颜值,支持git.多 ...

  6. 百度地图之鼠标绘制工具条库(开源库)

    百度地图开发常用网站 1.百度地图开放平台 http://lbsyun.baidu.com/ 2.百度地图 Javascript API JavaScript API v3.0 http://lbsy ...

  7. anemometer mysql5.6_Anemometer|Anemometer(mysql慢查询日志分析工具)下载免费版 - 欧普软件下载...

    Anemometer是一款非常实用的mysql慢查询日志分析工具,该工具是基于LAMP编写的,使用前需要搭建LAMP环境,它能够实现慢查询日志收集信息,方便dba对数据库慢查询的观测和统计.需要的朋友 ...

  8. 又一款超好用开源知识库管理工具

    DevWeekly收集整理每周优质开发者内容,包括开源项目.资源工具.技术文章等方面. 每周五定期发布,同步更新到 知乎:Jackpop . 欢迎大家投稿,提交issue,推荐或者自荐开源项目/资源/ ...

  9. java 日历工具_【Java】太强了,这款开源日历工具库堪称神器!

    首页 专栏 javascript 文章详情 0 太强了,这款开源日历工具库堪称神器! Github导航站发布于 今天 02:03 大家好,我是为广大程序员兄弟操碎了心的小编,每天推荐一个小工具/源码, ...

  10. phpmyadmin mysql管理器_phpMyAdmin(MySQL的资料库管理工具)

    phpMyAdmin简介 phpMyAdmin是一个以PHP为基础,以Web-Base方式架构在网站主机上的MySQL的资料库管理工具.phpMyAdmin 可以管理整个MySQL服务器(需要超级用户 ...

最新文章

  1. 面向程序员的网络基本知识 - 网络模型及网络设备
  2. 1亿美元,苹果把网易投资的VR公司收了
  3. vue中的浏览量_vue中前进刷新、后退缓存用户浏览数据和浏览位置的实践
  4. java强引用、软引用、弱引用、虚引用-Java的引用类型总共有四种,你都知道吗
  5. 一致性hash 简单实现
  6. java 定时器代码_Java定时器代码的编写
  7. 几种常见窗函数及其matlab程序实现,几种常见窗函数及其MATLAB程序实现(20200911110057).pdf...
  8. Javascript里使用Dom操作Xml
  9. 即插即用!开源项目【云框架】发布“基于Spring cloud的微服务架构”
  10. 【Data guard】Switchover切换
  11. [转载] python基于内置的SimpleHTTPServer来搭建简易的FTP服务器实现局域网内文件共享
  12. 使用Tomcat发布war包
  13. 中国工业企业数据库(2015年)
  14. iView 日期时间选择器设置开始时间至结束时间限制
  15. matlab实现单峰物体复原--光栅投影-多频外差
  16. InnoDB数据恢复的工具——TwinDB介绍
  17. 知网爬虫——爬取某个主题下的文章标题以及发表时间
  18. 3.3 构建神经网络小结
  19. 解决“VM has multidex support, MultiDex support library is disabled.”
  20. 自动化篇 - 为闲鱼制作一个客服机器人

热门文章

  1. EasiCSDeep:利用表面肌电信号识别颈椎病的深度学习模型
  2. 乌班图系统安装谷歌浏览器
  3. GitHub:现代科学取名工具
  4. cad计算机土方软件,土方计算软件FastTFT - 飞时达软件
  5. linux下使用ffmpeg下载m3u8视频
  6. dojo省份地市级联之省份Dao实现类(五)
  7. 全国计算机高新技术模块,全国计算机信息高新技术考试模块总表.doc
  8. Viewstub 以及 view.setVisible(GONE/VISIBLE) 的实现原理
  9. awesomium_v1.6.6_sdk 百度云下载地址
  10. mysql字符串拼接有空值_MySQL字符串拼接