如果 CI 系统只能获取到开源代码的源码包,是否应当使用 C++包管理器来管理内部项目的依赖呢?
我在开发一个内部的 C++ SDK,该 SDK 依赖于一些开源项目。我目前使用 conan
作为包管理器,从 conan center 下载二进制包并配置 CMake 的find_package
。但是公司的 CI 系统无法访问公网,只能访问内部站点上托管的开源项目的源码。
我想把 SDK 和依赖打包到一起以二进制形式发布,因此必须从当前配置( conan 从 conan center 下载二进制包)迁移到一种 CI 系统也能使用的方法上。我想我有这么几种选项:
- 直接使用脚本下载需要的源码包,然后编写脚本和 CMake 配置文件来编译 SDK 和 SDK 的依赖
- 内嵌一个包管理器,给包管理器编写脚本,用包管理器来管理构建中的依赖关系
- 更进一步,将包管理器分发给下游开发者,为他们自动配置 SDK 的依赖关系
所以问题来了:到底要不要用包管理器,如果用的话,vcpkg
和 conan
该怎么选? 我两种包管理器都用过一段时间。
PS:这个 SDK 是用 cmake + visual studio 来编译的;不过后续可能要做跨平台到 Android 和 iOS 上面去
(本问题英文版本是我本人发布于 Reddit 的,中文版本也是我自己编写的。)