c++ - 如何在多配置项目中管理第三方库

标签 c++ version-control

假设您正在从事某个支持多种配置(Linux 和 Windows 构建、共享/静态链接、具有或不具有某些功能等)的项目。要构建所有这些配置,您需要不同版本的第 3 方组件(使用 gcc 或 msvc、共享/静态、一些指定的预处理器定义等构建)。所以最终你会遇到管理所有这些配置的问题,不仅要为你的项目,还要为你的项目使用的所有库。

是否有通用的解决方案/方法/软件来促进管理单个项目的多个不同配置?

标准:

  • 易于设置,即从头开始构建您的项目需要花费多少时间?
  • 易于管理,即添加新依赖项或删除现有依赖项是否困难?
  • 防错,即开发人员多久会通过更改依赖项来破坏构建?

到目前为止,我已经尝试了几种方法。

  1. 在 VCS 下为每个配置存储预构建包。

    优点:项目较小时易于设置(更新工作拷贝,一切顺利)。易于管理(为每个必需的配置构建一次库)。错误证明(VCS 客户端通知您有关工作拷贝的更改)。

    缺点:不适用于分布式 VCS(GIT、Mercurial 等)。存储库快速增长,最终将无法忍受简单的“克隆”操作。您最终还会下载很多您并不真正需要的东西(例如,如果您在 Linux 上工作,则为 Windows 库)。如果你正在实现库,那么你的库的用户将通过将它集成到他们的项目中来继承所有这些问题。

  2. 存储库源而不是预构建包。

    优点:易于设置。

    缺点:添加新库非常痛苦。您需要为每个配置提供构建脚本和源补丁。但这只是冰山一角。您的依赖项有它们自己的依赖项,这些依赖项有它们自己的依赖项,依此类推...您很有可能最终得到类似 Gentoo 发行版的东西:)

  3. 在外部服务器上的某处存储一个存档或一个带有预构建包的文件夹。

    优点:解决问题...有点。

    缺点:设置不太容易(您必须手动复制存档)。不太容易管理(您必须手动将每个库添加到服务器)。没有变化的历史。不是防错的,因为很容易忘记在服务器上放一些东西,或者删除一些有用的东西。

    稍微改进的方法:你可以使用一个集中的VCS(例如,SVN)来存储所有的3rd party library,它会更容易使用。但是,如果您将它用作简单的文件存储,您仍然没有集中的更改历史记录,或者如果您将它用作子存储库,您将获得一个包含许多不必要库的巨大存储库。

    <

最佳答案

当您遇到此类问题时,您必须学习并开始使用Configuration Management工具(除了您选择的 SCM 的常用技术)。 CM 是过程,使用一些配置管理工具是这个过程的一部分。

目前,我们有多种不同的 CM 工具供您选择,您可以在其中选择最适合的或偏爱的。从我的 POV,Chef是“每个人的最佳选择”,你的里程可能会有所不同

关于c++ - 如何在多配置项目中管理第三方库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13684651/

相关文章:

git - 仅还原推送提交的单个文件

svn - 检查subversion中的最后提交消息

.net - 有哪些工具可用于确定哪些 .NET 程序集自上次构建以来发生了更改?

Git 提交样式 : All changed files at once or one at a time?

c++ - Boost消息队列未跨两个进程接收

java - Opencv JNA&C++ FaceRecognizer导致JVM崩溃

c++ - "Ambiguous call to overloaded function"在 MSVC 编译器中带有枚举类

version-control - 从CS-RCS迁移到Mercurial

c++ - 二进制搜索树读取字符串? C++

c++ - 是否可以用 C 或 C++ 实现小型磁盘操作系统?