在 RPM 规范文件中使用宏

using macros in a RPM spec file

我制作了一些规范文件来构建 RPM。我使用一些命令,如 cp 或 ln 或 chown。 我认为宏会有所帮助,以便在安装 RPM 的系统上使用特定版本,所以我使用类似 %{__cp} %{__ln_s} 等的东西。 RPM 是在 CentOS 7 上构建的,但现在我试图将它安装到 CentOS 6 上,但出现错误,cp 和 ln 在 /usr/bin/ 中找不到,但它们确实存在于 /bin

/var/tmp/rpm-tmp.ElF6f7: line 46: /usr/bin/chown: No such file or directory
/var/tmp/rpm-tmp.ElF6f7: line 49: /usr/bin/cp: No such file or directory

在 CentOS 7 它们也存在于 /bin 以及 /usr/bin

所以现在我想知道,为什么要使用这些宏,直接使用 cp 和 ln 以及 chown 不是更容易吗? 我认为对于我的情况会更好,因为我不会只为特定的发行版使用我的包,它们应该适用于许多发行版。

你是对的,有时候不惜一切代价使用宏会适得其反。

此外,如果我应用其他编程语言的名称空间逻辑,则带有两个下划线的宏(例如 %{__cp})只是内部结构。 IE。它们用于定义其他宏,但不应直接使用。

虽然存在被大量使用并且不时被覆盖的宏(例如 %{_smp_mflags} 或各种目录名称),但存在只会混淆阅读的宏,例如 %{__mkdir_p}. 其他人的意思是这样你可以查询它们 %{_buildshell}。使用 /usr/bin/bash foo.sh 而不是 %{_buildshell} foo.sh.

来执行 shell 脚本要省事得多