3.4. Defining custom RPM macros in a spec file


In addition to using the built-in and distribution RPM macros, you can define custom RPM macros to simplify package maintenance and make it consistent across packages. RPM spec files can use either the %define and %global macros.

The differences between the %define and %global macros are the following:

  • %define has global scope, except when used in a parametric macro, where its scope is local to this macro. The body of the %define macro is expanded when used.
  • %global has global scope. The body of the %global macro is expanded at definition time.
重要

Use %global macros for the following actions:

  • To avoid multiple redundant evaluations
  • To define global macros inside parametric macros

Otherwise, use %define macros.

The %define and %global macro use the %global <name> <body> or %define <name>[(opts)] <body> pattern:

  • All whitespace, the preceding and succeeding, that surrounds <body> is removed during the macro expansion.
  • The macro name might be composed of alphanumeric characters and the underscore (_) character.
  • Inclusion of the (opts) field is optional:

    • Simple macros do not contain the (opts) field. In this case, only recursive macro expansion is performed.
    • Parametric options are function-like macros that accept arguments and possible options. For more details, see the /usr/share/doc/rpm/macros.md file.
重要

Macros are evaluated and expanded everywhere in the spec file, even on lines commented by using the hash (#) and in spec file sections, such as %changelog.

To escape macro expansion, you can use the %dnl macro which comments out everything up to the next new line.

You can also escape macro expansion by placing a second percent sign (%) in front of the macro, for example %%{name}.

For more information about macros, see the /usr/share/doc/rpm/macros.md file.

Procedure

  • Define the macro. For example, you can include the following line in the RPM spec file.

    %define date 20241114
    %define upstream_version 2.5.4-pre1
Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。 了解我们当前的更新.

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

Theme

© 2026 Red Hat
返回顶部