【问题标题】:Is there a build system for C++ which can manage release dependencies?是否有可以管理发布依赖项的 C++ 构建系统?
【发布时间】:2011-07-12 21:26:08
【问题描述】:

有一点背景知识,我们有一个相当大的代码库,它内置在一组库中 - 然后分发给各种二进制文件供内部使用。目前,这个构建过程是杂乱无章的,一切都是在树干上构建的。

我们想探索是否有一个构建系统可以让我们管理发布并自动引入依赖项。对于java,Maven,存在这样的工具。我喜欢它的包、存储库和依赖机制,而且我知道使用 maven-native 或 maven-nar 插件我们可以得到它。然而问题是我们无法将源代码树修复为“maven 方式”——不幸的是(至少是 maven-nar)插件似乎不喜欢非这种结构的代码......

所以我的问题是,有没有一种工具可以满足 C++ 的以下要求

  1. 构建
  2. 包(例如带有所有标头的库,例如 .nar)
  3. 将包上传到“存储库”
  4. 自动从所述存储库中提取所需的依赖项,提取标头并包含在构建、提取库和链接中。依赖项将在该二进制文件的“发布”中描述 - 因此,如果我们要使用 CI 服务器构建该“发布”,则构建脚本会列出必要的依赖项(如 pom.xml 文件)。

我可以通过使用额外的 python 模块修改 make+shell 脚本或 waf/scons 来进行自己的打包和依赖管理 - 但是我会认为这是一个常见问题,并且某个地方有人有这个工具吗?还是每个人都自己滚动?还是我错过了 waf/scons 或 CMake 的一个重要功能?


编辑:我应该补充一下,操作系统是首选,非 MS...

【问题讨论】:

    标签: c++ build build-process


    【解决方案1】:

    例如,大多数 linux 发行版都包含对其软件包的依赖性跟踪。在我试图拼凑起来解决您的问题的所有事情中,最终它们都“不是很完美”。恕我直言,最好的办法是创建一个本地 yum/deb 存储库或其他东西(继续我的 linux 示例),然后根据需要从那里提取东西。

    许多源代码包还可以快速告诉您进行自构建(而不是安装二进制预编译包)必须安装的最少组件。

    不幸的是,这些方法要容易得多,尽管它比尝试自己做要好。最后,为了支持跨平台,每个操作系统也需要这些系统之一。好玩!

    【讨论】:

    • 这也是我目前的想法,构建一个 tar.gz 或其他东西作为包,并实际使用 SCM 来管理版本、签入/签出等。我很惊讶没有任何东西存在这……
    【解决方案2】:

    我不确定我是否正确理解了您想要的内容,但我会告诉您我们使用的内容,希望对您有所帮助。

    我们使用 cmake 进行构建。需要注意的是,cmake 非常强大。除其他外,您可以在自定义目录中“进行安装”以收集头文件和二进制文件以构建您的版本。我们将它与一些 python 脚本结合起来构建我们的版本。 YMMV,但对于通用工具而言,有些事情可能过于具体,而自定义脚本可能是更简单的解决方案。

    我们的构建工具直接从 svn 存储库(结帐、构建...)构建版本,我真的建议避免某些地方州以某种不可预见的方式污染版本。它还强制执行可再现性。

    【讨论】:

    • 感谢您的回答,SCM 的构建版本不是问题,因为我们的 CI 会这样做。我更追求的是一个构建系统,它可以从另一个存储库中提取必要的依赖项(库 + 头文件)来构建该版本。
    【解决方案3】:

    这在很大程度上取决于您所针对的平台。我只能说 Linux,但它也取决于您所针对的发行版,包是发行版级别的概念。为了让事情更简单一些,有些发行版系列使用类似的打包机制和包名称,这意味着制作 Debian 包的相同配方也可能制作出 Ubuntu 包。

    我肯定会说,如果您愿意使用一组可管理的打包机制来定位所有已知 Linux 发行版的一个子集,那么从长远来看,您将从 自己滚动中受益并按照发行版创建者的意图构建软件包。这些系统允许您指定运行时和构建时的依赖关系,并且还存在自动 CI 环境(例如基于 rpm 的发行版的 OBS)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-02-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-11-02
      • 2010-09-06
      • 2010-11-30
      • 1970-01-01
      相关资源
      最近更新 更多