【问题标题】:How overwrite optflags direct in rpm spec file?如何在 rpm 规范文件中直接覆盖 optflags?
【发布时间】:2019-09-22 06:15:15
【问题描述】:

如何正确覆盖规范文件中的%optflags

$ rpm --eval %optflags   # Fedora 29
-O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m64 -mtune=generic -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection

我需要在我的 spec 文件 中直接将 %optflags 宏中的 -O2 替换为 -O 吗?我只找到了一个解决方案:

%global optflags %(echo %{optflags} | sed 's/-O[0-3]/-O/')

对吗?

注意rpmbuild -ba --define "optflags -O bla bla" my.spec 这不是我的情况的解决方案。

【问题讨论】:

    标签: rpm rpmbuild rpm-spec


    【解决方案1】:

    您似乎已经找到了部分解决方案。要检查它是否正确,您可以暂时放置

    echo %optflags
    

    在您的规范文件中打印一次值或

    %dump
    

    转储所有宏(不确定是否会以这种方式打印 optflags)

    【讨论】:

      【解决方案2】:

      您实际上不必替换 optflags 中的 -O2 即可有效使用 -O。您只需要将 -O 附加到 optflags,因为 gcc 只考虑最后一次出现的 -O 选项:

      如果您使用多个 -O 选项,无论有无级别编号,最后一个 这样的选择是有效的。

      gcc(1)

      因此,您无需掏空,只需像这样附加-O

      %global optflags %{optflags} -O
      

      您可以通过使用rpmspec 解析所有宏来验证此方法,例如:

      $ rpmspec -P example.spec
      

      【讨论】:

        猜你喜欢
        • 2020-12-23
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-08-09
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多