新玩意:使用vcpkg来管理你的C++代码库

数码频道 2020-05-0966未知admin

  vcpkg是一个集成在级IDE(Visual Studio)中的一个组件,其主要用于代码库的管理及索引。在2019.06这次更新中,vcpkg现在可以用来在多个不同的平台上来管理C/C++代码库。团队为此还专门在github上专门创建了一个仓库:microsoft/vcpkg.

  团队使用Ports这个名词来表示各种可用的第三方代码库。在今年6月的更新中又新增44个新的代码库,这些加入进来的新伙计们包括:bdwgc, cJSON, greatest, immer, json-c以及zydis. 值得注意的是,团队选择代码库的其中一个原则是:这个代码库的star数是否足够?列出来的几个,star数基本都在1K以上。

  为了能让者快速了解一个代码库,团队将各个代码库的主页也加入进来。例如,有一个代码库Abseil,只需要至:/ports/abseil/CONTROL,我们就可以看到一行主页的链接信息,这样就能方便的前往代码库主页了解这个库。

  在vcpkg工具中,我们可以使用search/install等指令来管理代码库。另外,团队还添加了一个所谓的:Overlay ports的特性。我们可以使用这个特性来制定不同版本的代码库,甚至用来创建私有的Port。

  在一个项目中,我想使用OpenCV视觉库,并且由于项目的一些依赖原因,我需要使用的是3.0的版本。但是不巧的是,这个版本稍稍有点旧了,vcpkg中包含的版本是3.4.3, 所以,这就比较尴尬了。

  解决此问题的方法时,我们在GitHub上创建一个私有的仓库,然后将OpenCV3.0的代码Checkin到这个仓,然后将这个私有仓提交到vcpkg的ports目录,这样项目就可以使用3.0版本的OpenCV了。

  接下来,项目团队就可以使用vcpkg的overlay-ports参数来使用这个版本的代码库了。

  当然,如果某一天,你又想使用最新版本的库了,可以使用bootstrap-vcpkg.bat来更新vcpkg。

  团队目前在完善这个特性,所以你可能会碰到一些稀奇古怪的问题,这个时候,请到GitHub上的vcpkg的主页提交问题给团队。

  可以看到Windows平台的ports最多,用于位Windows的库有1000多个。几个平台也有几百个。如果你期望的目标平台不在这个列表中,你还可以创建目标平台,方法还挺简单,具体得看看文档了。微软的文档,我的感觉是又多又齐全,我这辈子应该是没有机会全部看完了。

  和提到的Overlay Ports类似的,本次更新还包含Overlay Triplets特性。我们可以使用这个特性来Override默认的目标平台,或者创建新的目标平台。

  有些Linux用户,可能需要动态链接库,但是目前的x-linux平台中提供的是静态的库。那么我们可以基于x-linux平台来新建一个新的Triplet,这个新Triplet将创建动态库。

  最后,我们可以使用–overlay-triplets来安装第三方库了,安装成功之后,就可以得到动态编译出来的库,而不是默认的静态库。

  除了方便代码库的使用者,团队还考虑到了代码库的作者。新增的几个特性,可以帮助代码库作者提升效率和增强代码的品质。

  团队在Azure DevOps pipelines上添加了公共的测试代码,这些测试代码将测试搭建在GitHub上的vcpkg仓库。者可以直接获取编译失败日志及静态检查失败结果。例如:

  可以通过图标来Check是否成功。如果Check失败,则还可以看到有关此次失败的详细信息:

  在Azure DevOps的Sumry页面,可以下载所有失败的日志及相关的变更描述。

  通过vcpkg_check_features这个新特性,我们可以在检查代码库的一个或者多个feature是否包含在库中。例如,如果想启用OpenCV的CUDA特性支持,可以使用如下指令:

  vcpkg_check_features简化了代码库的可选特性的创建过程,在之前的实践中,可能需要编写如下的脚本:

  vcpkg从一个VS中自带的C++代码管理组件,逐渐演化成今天的跨平台的代码管理组件,离不开团队的辛勤工作,我们也可以从这个变化中看出:微软的重心已经从Windows这条大船转移到企业应用,云服务及开源社区。这个变革在Ballmer时期是不可想象的,相信在Satya的领导下,微软能在新的领域再创一个辉煌。

原文标题:新玩意:使用vcpkg来管理你的C++代码库 网址:http://www.gunfollow.com/shumapindao/2020/0509/23123.html

Copyright © 2002-2020 脚踏实地新闻网 www.gunfollow.com 版权所有  

联系QQ:1352848661