【发布时间】:2021-11-25 04:44:14
【问题描述】:
我正在构建一个 c++ 存储库,它依赖于支持此存储库的外部公司存储库。我必须构建这些以针对特定于我的系统的某些版本的 boost 和其他库。在(长)构建过程结束时,我有几个静态库和完成的可执行文件。我使用 Docker 进行这些构建。
我正在尝试确定管理这些依赖项的最简洁方法。
- git 子模块和每次从源代码构建二进制文件(最长构建)
- 单独构建库并将它们存储为每个存储库的工件/版本(大部分工作,跨多个存储库)
- 编写一份关于如何重建二进制文件并将其提交到主仓库的自述文件(由于某种原因感觉很脏)
c++ 中处理这些中间二进制文件的常见做法是什么?
【问题讨论】:
-
绝对不是第三个!一个好的 DevOps CI 流程可以自动执行类似的步骤。第二个目标是一个很好的目标,因为它可以最大限度地保持项目的独立性。但是,设置工作量很大。如果那是最终目标,您应该找到一条渐进的路径来达到目标,而不是依赖于在您的项目可用之前设置的所有脚手架......
-
...第一个是一个很好的起点,甚至可能是终点。通过使用 Docker 的层缓存,您应该能够避免长时间的重建。它应该在你的工作站上开箱即用,如果你在那里启用它,你甚至可以保持你的 CI 过程快速。不过,我可能会远离子模块。他们有点笨拙。你看过子树吗?子树是子模块的一个很好的替代品。
-
你已经用git 交叉标记了这个,所以我在这里要提一下,在 Git 中存储 any 二进制文件通常是不明智的,而且存储几乎总是不明智的Git 中的任何构建产品/工件:Git 用于存储人工操作的源代码。
-
使用 ccache 选项 1 重建应该真的快速运行。