修改.rpmmacros为部分RPM包加编译选项时%{name}无法展开怎么办?
解决RPM构建中%{name}无法在~/.rpmmacros展开的问题
你遇到的核心问题是:%{name}属于spec文件级别的变量,在全局的~/.rpmmacros加载阶段还未被定义,所以直接用它做条件判断会失效。以下是几种可行的解决方案:
方案1:针对特定包构建时通过命令行传递参数
构建zip包时,直接在rpmbuild命令里临时定义编译选项,只对当前构建生效:
rpmbuild -ba zip.spec --define '__global_compiler_flags -my_own_option'
方案2:修改目标包的spec文件(推荐)
如果有权限修改zip的spec文件,直接在%build段添加自定义编译选项,精准控制范围:
%build # 追加自定义编译选项到原有全局编译flags %global __global_compiler_flags %{__global_compiler_flags} -my_own_option %configure make %{?_smp_mflags}
方案3:用--with参数配合全局宏实现条件触发
- 先修改~/.rpmmacros的内容:
%if %{with my_zip_custom_flag} %__global_compiler_flags -my_own_option %endif
- 构建
zip包时添加--with参数激活这个条件:
rpmbuild -ba zip.spec --with my_zip_custom_flag
其他包构建时不添加该参数,就不会启用这个编译选项。
内容的提问来源于stack exchange,提问作者Rufeer
相关产品推荐
相关产品推荐

