我制作了一些spec文件来构建RPM。我使用一些命令,如cp或ln或chown。 我认为宏可以帮助使用安装RPM的系统中的特定版本,所以我使用%{__ cp}%{__ ln_s}等内容。 RPM建立在CentOS 7上,但现在我尝试将它安装到CentOS 6上,我得到的错误是/ usr / bin /中找不到cp和ln,但它们确实存在于/ 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就像它们一样? 我认为对于我的情况会更好,因为我不会仅针对特定的发行版进行包装,他们应该使用很多发行版。
答案 0 :(得分:1)
你是对的,有时候不惜一切代价使用宏会产生反作用。
此外,如果我从其他编程语言应用命名空间逻辑,则具有两个非期望值(例如%{__cp}
)的宏意味着只是内部。即它们用于定义其他宏,但不应直接使用。
虽然存在大量使用并且不时被覆盖的宏(例如%{_smp_mflags}
或各种目录名称),但存在只会混淆读取的宏,例如%{__mkdir_p}.
其他人意味着你可以查询他们%{_buildshell}
。使用/usr/bin/bash foo.sh
而不是%{_buildshell} foo.sh
执行shell脚本会更安心。