【问题标题】:Release management system for LinuxLinux 发布管理系统
【发布时间】:2010-02-19 14:42:05
【问题描述】:

我们公司需要一种用于 Linux/C++ 的发布管理工具。我们的产品由多个库和配置文件组成。在这里,我将列出我们希望此类系统具有的基本功能:

  • 能够跟踪依赖项,轻松增加依赖项的主要版本增加的库的主要版本。它应该在内部构建某种依赖关系图,以便知道谁受到更新的影响。

  • 知道如何构建它处理的产品。一个特定的构建文件,甚至更好 - 阅读和理解 makefile 的能力。

  • 使用 SVN,以便它可以从那里检查新版本并进行构建。

  • 生成一些安装程序 - 以 rpm 或 tar.gz 格式。为此,它应该能够理解 rpm 规范文件格式。

目前我们正在开发这种已经非常有用的工具。但是我相信我们的任务并不是独一无二的,应该有一些工具可以完成这项工作。

【问题讨论】:

    标签: c++ linux release-management rpm


    【解决方案1】:

    您应该考虑混合使用 Hudson、Maven(用于构建管理)、Ivy(用于依赖项管理)和 Archiva(用于工件归档)。

    另外,如果您正在研究 cross.compilation,请查看 Make Project Creator (MPC) 和 Bakefile。

    玩得开心!

    【讨论】:

      【解决方案2】:

      在我目前正在进行的项目中,我们使用 cmake 和其他 Kitware 工具来处理本机代码 (C++) 的大部分问题。逐点回答:

      • cmake 脚本处理我们不同项目的依赖关系。我们有一个依赖图,但不知道是自制脚本还是cmake提供的功能。

      • cmake 会生成有关平台的 makefile。如果在开发时被要求这样做,我会为 eclipse cdt 和 Visual Studio 生成项目。

      • Cmake 有几个工具,ctest 和 cdash,我们用来进行日常构建并查看测试的效果。

      • 为了创建安装程序,cmake 具有 cpack。只需一个脚本,它就可以在 Linux 中生成 tar.gz、deb 或 rpm 文件,或者在 Windows 中自动生成 NSIS 脚本来生成安装程序。

      对于 Java 代码,我们使用这里已经提到的 maven 和 hudson。

      【讨论】:

        【解决方案3】:

        看看这篇来自 DDJ 的文章,其中介绍和实现了一个更强大的构建系统概念(比 make)。不确定它是否能很好地满足您的要求,但它是我见过的最接近的。几个月前我也在寻找同样的东西,然后我发现了这篇文章。

        http://www.drdobbs.com/architect/218400678

        【讨论】:

          【解决方案4】:

          Maven 有一个native code plugin。我不认为它会做你想做的一切,但它擅长跟踪依赖项的版本号,会构建人工制品,它会与你的 VCS 一起工作。

          【讨论】:

            【解决方案5】:
            • 不知道
            • cmake/scons:我使用过 cmake,但我并不完全喜欢它,但我听说过关于 scons 的好消息。但是 scons 是基于 python 的,所以你需要在 build/dev 机器上安装 python。
            • 我使用Hudson,它有一个从svn 获取的插件。它通常智能地执行,特别是仅当某些文件在 svn 更新中发生更改时才构建。 Hudson 很容易上手。 Hudson 是基于 Java 的,在 Java 社区中非常流行。这意味着它非常跨平台,但您需要在构建机器上安装 JRE。
            • 可能可以在 hudson 中调用一些 rpm 工具。

            【讨论】: