我在开发一个内部的 C++ SDK,该 SDK 依赖于一些开源项目。我目前使用 conan
作为包管理器,从 conan center 下载二进制包并配置 CMake 的find_package
。但是公司的 CI 系统无法访问公网,只能访问内部站点上托管的开源项目的源码。
我想把 SDK 和依赖打包到一起以二进制形式发布,因此必须从当前配置( conan 从 conan center 下载二进制包)迁移到一种 CI 系统也能使用的方法上。我想我有这么几种选项:
所以问题来了:到底要不要用包管理器,如果用的话,vcpkg
和 conan
该怎么选? 我两种包管理器都用过一段时间。
PS:这个 SDK 是用 cmake + visual studio 来编译的;不过后续可能要做跨平台到 Android 和 iOS 上面去
(本问题英文版本是我本人发布于 Reddit 的,中文版本也是我自己编写的。)
1
nightwitch 2020-09-12 20:05:35 +08:00
自带源码呗, 放 third_party 里面。需要升级的时候替换文件
|
2
zwy100e72 OP @nightwitch 这种情况下还有别的限制。源码版本管理是 git,不太想直接带开源的源码,或者是二进制包,git 仓库的体积会变得很大,也可能会不小心改掉别人的源码;很多三方库不是用 cmake 管理的,还得给他们写 FindX.cmake 配置文件
|
3
secondwtq 2020-09-12 21:42:12 +08:00
/r/cpp_questions 是什么地方 ... /r/cpp 要活跃的多
我想了一下我们这边的依赖是把 binary 统一放在一个文件服务器里面( binary 来源不明),所有其他服务器都能访问该文件服务器,然后每个版本都写死依赖版本的。 分发的时候直接写 CMake 把所有依赖的库全都拷一遍。不过这个项目是直接可执行的软件,不是 SDK 。 你这个如果依赖于包管理器的话,会不会造成 SDK 用户也必须使用包管理器,他们能不能接受呢 |
4
zwy100e72 OP @secondwtq 按照我理解 /r/cpp 是用来发新闻 / 发 blog 的,所以没往那边发
> 会不会造成 SDK 用户也必须使用包管理器 希望达成的效果是,用的话更方便,不用的话那么手动配置也不是不行。下游的开发者还是 Visual Studio 工程,这种情况他最差也就是手动配置下 |
5
shynome 2020-09-12 22:05:49 +08:00 via Android
git submodule ?把第三方依赖的放到另外一个仓库里
|
6
waruqi 2020-09-13 13:48:43 +08:00 via Android
可以用 xmake 支持 vcpkg conan clib brew 等包仓库,也有内置自建的官方包仓库,也支持用户自建的分布式仓库,以及私有仓库
https://xmake.io/#/zh-cn/package/remote_package |