假设您正在处理一些支持多种配置(linux 和 windows 构建、共享/静态链接、具有或不具有某些功能等)的项目。要构建所有这些配置,您需要不同版本的 3rd 方组件(使用 gcc 或 msvc、共享/静态、一些指定的预处理器定义等构建)。所以最终你会遇到一个问题,不仅要为你的项目管理所有这些配置,还要为你的项目使用的所有库管理这些配置。
是否有通用的解决方案/方法/软件来促进管理单个项目的多个不同配置?
标准:
- 易于设置,即从头开始构建项目需要花费多少时间?
- 易于管理,即是否很难添加新的依赖项或删除现有的依赖项?
- 错误证明,即开发人员多久会通过更改依赖项来破坏构建?
到目前为止,我已经尝试了几种方法。
在 VCS 下存储每个配置的预构建包。
优点:在项目很小的情况下易于设置(更新工作副本,你很高兴)。易于管理(为每个所需的配置构建一次库)。错误证明(VCS 客户端会通知您工作副本中的更改)。
缺点:不适用于分布式 VCS(GIT、Mercurial 等)。存储库快速增长,最终一个简单的“克隆”操作将是无法容忍的。您最终还下载了很多您并不真正需要的东西(即,如果您在 linux 上工作,则为 windows 库)。如果您正在实现库,那么您的库的用户将通过将其集成到他们的项目中来继承所有这些问题。
存储库源而不是预构建的包。
优点:易于设置。
缺点:添加新库非常痛苦。您需要为每个配置提供构建脚本和源代码补丁。但这只是冰山一角。您的依赖项有它们自己的依赖项,它们有自己的依赖项,依此类推……您很有可能最终得到类似 Gentoo 发行版的东西 :)
在外部服务器的某个地方存储一个存档或只是一个带有预构建包的文件夹。
优点:解决了问题……有点。
缺点:设置起来并不容易(您必须手动复制存档)。不太容易管理(您必须手动将每个库添加到服务器)。没有变化的历史。不是防错的,因为很容易忘记在服务器上放一些东西,或者删除一些有用的东西。
略微改进的方法:您可以使用集中式 VCS(例如 SVN)来存储所有 3rd 方库,这样会更容易使用。但是,如果您将其用作简单的文件存储,您仍然没有集中的更改历史记录,或者如果您将其用作子存储库,您将获得一个包含许多不必要库的巨大存储库。