如果 CI 系统只能获取到开源代码的源码包,是否应当使用 C++包管理器来管理内部项目的依赖呢?

2020-09-12 19:57:23 +08:00
 zwy100e72

我在开发一个内部的 C++ SDK,该 SDK 依赖于一些开源项目。我目前使用 conan 作为包管理器,从 conan center 下载二进制包并配置 CMake 的find_package。但是公司的 CI 系统无法访问公网,只能访问内部站点上托管的开源项目的源码。

我想把 SDK 和依赖打包到一起以二进制形式发布,因此必须从当前配置( conan 从 conan center 下载二进制包)迁移到一种 CI 系统也能使用的方法上。我想我有这么几种选项:

所以问题来了:到底要不要用包管理器,如果用的话,vcpkgconan 该怎么选? 我两种包管理器都用过一段时间。

PS:这个 SDK 是用 cmake + visual studio 来编译的;不过后续可能要做跨平台到 Android 和 iOS 上面去

(本问题英文版本是我本人发布于 Reddit 的,中文版本也是我自己编写的。)

2106 次点击
所在节点    C++
6 条回复
nightwitch
2020-09-12 20:05:35 +08:00
自带源码呗, 放 third_party 里面。需要升级的时候替换文件
zwy100e72
2020-09-12 21:27:38 +08:00
@nightwitch 这种情况下还有别的限制。源码版本管理是 git,不太想直接带开源的源码,或者是二进制包,git 仓库的体积会变得很大,也可能会不小心改掉别人的源码;很多三方库不是用 cmake 管理的,还得给他们写 FindX.cmake 配置文件
secondwtq
2020-09-12 21:42:12 +08:00
/r/cpp_questions 是什么地方 ... /r/cpp 要活跃的多

我想了一下我们这边的依赖是把 binary 统一放在一个文件服务器里面( binary 来源不明),所有其他服务器都能访问该文件服务器,然后每个版本都写死依赖版本的。

分发的时候直接写 CMake 把所有依赖的库全都拷一遍。不过这个项目是直接可执行的软件,不是 SDK 。

你这个如果依赖于包管理器的话,会不会造成 SDK 用户也必须使用包管理器,他们能不能接受呢
zwy100e72
2020-09-12 22:01:03 +08:00
@secondwtq 按照我理解 /r/cpp 是用来发新闻 / 发 blog 的,所以没往那边发

> 会不会造成 SDK 用户也必须使用包管理器

希望达成的效果是,用的话更方便,不用的话那么手动配置也不是不行。下游的开发者还是 Visual Studio 工程,这种情况他最差也就是手动配置下
shynome
2020-09-12 22:05:49 +08:00
git submodule ?把第三方依赖的放到另外一个仓库里
waruqi
2020-09-13 13:48:43 +08:00
可以用 xmake 支持 vcpkg conan clib brew 等包仓库,也有内置自建的官方包仓库,也支持用户自建的分布式仓库,以及私有仓库

https://xmake.io/#/zh-cn/package/remote_package

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/706450

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX