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作为'源代码'.我要求一个可以协调这个过程的工具.
根据您需要做的复杂性,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,如解释在这里.