什么是好的RPM构建工具?

djh*_*987 5 makefile build rpm scons

我负责构建多个RPM.我为每个RPM包提供了pristine SPEC文件,我有BASH脚本,它们设置了必要的环境并构建了RPM.

我想使用实际的构建工具(如make)来构建这些RPM.通过这样做,我希望消除对自定义,混淆BASH脚本的需求,转而使用清晰,可维护的配置文件(类似于make的Makefile).但是,使用POSIX制作和保持make文件集是最新的可能与维护我目前用于构建RPM包的BASH脚本一样多.像cmake和automake这样的程序包含make命令的功能是有原因的 - 这些工具更具表现力,允许更小,更清晰的配置文件.

但是,使用autoconf/automake似乎也是一个糟糕的选择,因为它们似乎专门为C和C++开发而构建.有人建议我使用scons,但是这似乎是最好的选择(由于它的配置文件是实际的python脚本),它也适用于特定的语言.

使用我的SPEC文件作为"源代码"和环境作为"依赖项"(例如设置制作RPM所需的rpmbuild目录树结构),是否有一个很好的构建工具可以用来替换我的BASH脚本以获得更清洁,更多可维护的RPM构建解决方案?

编辑:当我说"构建工具"时,我似乎不清楚我需要什么.我已经使用rpmbuild作为'编译器',我使用SPEC文件(以及二进制文件的相关源代码)'编译'RPMs作为'源代码'.我要求一个可以协调这个过程的工具.

Bra*_*ady 6

根据您需要做的复杂性,SCons确实是一个不错的选择.我总觉得用Python编写脚本比用Bash编写脚本要容易得多.但这也是个人偏好.

以下是在SCons中生成RPM的相关Python/SCons代码:

env = Environment(tools=['default', 'packaging'])

rpmSourceFiles = ['file1', 'file2'] # This is a Python list
rpmTargetFile = 'yourRpmFile'

env.Package( source         = rpmSourceFiles,
             target         = rpmTargetFile,
             NAME           = 'foo',
             VERSION        = '1.2.3',
             PACKAGEVERSION = 0,
             PACKAGETYPE    = 'rpm',
             LICENSE        = 'gpl',
             SUMMARY        = 'balalalalal',
             DESCRIPTION    = 'this should be really really long',
             X_RPM_GROUP    = 'Application/fu',
             SOURCE_URL     = 'http://foo.org/foo-1.2.3.tar.gz'
        )
Run Code Online (Sandbox Code Playgroud)

您可以在此处找到此处记录的Package()构建器.关于它rpmSourceFiles,它是一个Python列表,应该列出RPM输入文件.如果您使用SCons安装这些源文件,那么您只需列出简单的名称,否则您将需要提供绝对路径.

另一种选择,如果你只是想用Python的唯一,是编程与Python直接RPM,如解释在这里.

  • CMake [CPack可以定位RPM](http://www.cmake.org/Wiki/CMake:CPackPackageGenerators#RPM_.28Unix_Only.29). (2认同)