3.4. spec ファイルでのカスタム RPM マクロの定義
パッケージのメンテナンスを簡素化し、パッケージ間で一貫性を保つために、組み込みの RPM マクロや配布用 RPM マクロに加えて、カスタム RPM マクロを定義します。RPM の spec ファイルでは、%define マクロと %global マクロのいずれかを使用できます。
%define マクロと %global マクロの違いは次のとおりです。
-
%defineはグローバルスコープを持ちます。ただし、パラメトリックマクロ内で使用される場合、そのスコープはそのマクロ内に限定されます。%defineマクロの本体は使用時に展開されます。 -
%globalはグローバルスコープを持ちます。%globalマクロの本体は定義時に展開されます。
次の操作を行う場合は、%global マクロを使用してください。
- 重複した複数の評価を避ける
- パラメトリックマクロ内でグローバルマクロを定義する
それ以外の場合は、%define マクロを使用してください。
%define および %global マクロは、%global <name> <body> または %define <name>[(opts)] <body> というパターンを使用します。
-
<body>を囲む前後のすべての空白は、マクロの展開時に削除されます。 -
マクロ名は、英数字とアンダースコア (
_) 文字で構成されている場合があります。 (opts)フィールドの指定は任意です。-
単純なマクロには
(opts)フィールドは含まれません。この場合、再帰的なマクロ展開のみが実行されます。 -
パラメトリックオプションを指定したマクロは、引数や使用可能なオプションを受け取る関数のようなマクロです。詳細は、
/usr/share/doc/rpm/macros.mdファイルを参照してください。
-
単純なマクロには
マクロは、ハッシュ (#) を使用してコメント化された行や、%changelog などの spec ファイルのセクション内でも、spec ファイル内のすべての場所で評価および展開されます。
マクロの展開をエスケープするには、次の新しい行までの内容をすべてコメントアウトする %dnl マクロを使用できます。
マクロの前にパーセント記号 (%) をもう 1 つ配置することで、マクロの展開をエスケープすることもできます (例: %%{name})。
マクロの詳細は、/usr/share/doc/rpm/macros.md ファイルを参照してください。
手順
マクロを定義します。たとえば、RPM
specファイルに次の行を含めることができます。%define date 20241114 %define upstream_version 2.5.4-pre1