在一些Linux发行版的软件包构建过程中,RPM打包系统有一个不太为人所知但极其重要的功能——自动编译标志设置。这个功能通过%set_build_flags宏自动调用实现。
这个自动调用的过程是通过内部宏%_auto_set_build_flags控制的,可以通过rpm --eval '%_auto_set_build_flags'查看,当输出结果为1时,表示自动设置编译标志的功能已启用,此时在执行构建rpmbuild -ba package.spec时,会被自动调用%set_build_flags宏(rpm --eval %set_build_flags)。
实际构建过程解析
假设有一个SPEC文件,内容如下
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
Name: example Version: 1.0 Release: 1%{?dist} Summary: Example package %description This is an example package. %prep %setup -q %build # 注意:这里没有显式设置任何编译标志 make %install make install DESTDIR=%{buildroot} %files %{_bindir}/example |
当执行rpmbuild -ba package.spec时,实际发生的构建过程相当于
|
1 2 3 4 5 6 |
%build # 自动插入的编译标志设置 %set_build_flags make |
禁用方法
如需禁用此功能,可在SPEC文件开头添加
参考:https://fedoraproject.org/wiki/Changes/SetBuildFlagsBuildCheck
原文链接:RPM构建中的自动编译标志set_build_flags,转载请注明来源!






