Makefile-directives

提供:Dev Guides
移動先:案内検索

Makefile-ディレクティブ

さまざまな形式で利用可能な多数のディレクティブがあります。 システム上の make プログラムは、すべてのディレクティブをサポートしていない場合があります。 あなたの make がここで説明しているディレクティブをサポートしているかどうかを確認してください。 GNU make はこれらのディレクティブをサポートしています。

条件付きディレクティブ

条件付きディレクティブは-

  • ifeq ディレクティブは条件を開始し、条件を指定します。 コンマで区切られ、括弧で囲まれた2つの引数が含まれています。 両方の引数で変数置換が実行され、それらが比較されます。 ifeqに続くmakefileの行は、2つの引数が一致する場合に従います。それ以外の場合は無視されます。
  • ifneq ディレクティブは条件を開始し、条件を指定します。 コンマで区切られ、括弧で囲まれた2つの引数が含まれています。 両方の引数で変数置換が実行され、それらが比較されます。 2つの引数が一致しない場合、ifneqに続くメイクファイルの行に従います。それ以外の場合は無視されます。
  • ifdef ディレクティブは条件を開始し、条件を指定します。 単一の引数が含まれます。 指定された引数がtrueの場合、条件はtrueになります。
  • ifndef ディレクティブは条件を開始し、条件を指定します。 単一の引数が含まれます。 指定された引数がfalseの場合、条件はtrueになります。
  • else ディレクティブは、前の条件が失敗した場合、次の行に従います。 上記の例では、これは、最初の代替が使用されない場合は常に2番目の代替リンクコマンドが使用されることを意味します。 条件にelseを含めることはオプションです。
  • endif ディレクティブは条件を終了します。 すべての条件はendifで終わる必要があります。

条件ディレクティブの構文

他のない単純な条件付き構文は次のとおりです-

conditional-directive
   text-if-true
endif

text-if-trueは任意のテキスト行で、条件がtrueの場合にメイクファイルの一部と見なされます。 条件が偽の場合、代わりにテキストは使用されません。

複雑な条件の構文は次のとおりです-

conditional-directive
   text-if-true
else
   text-if-false
endif

条件が真の場合、text-if-trueが使用されます。それ以外の場合、text-if-falseが使用されます。 text-if-falseには、テキストの任意の行数を指定できます。

条件ディレクティブの構文は、条件が単純であろうと複雑であろうと同じです。 さまざまな条件をテストする4つの異なるディレクティブがあります。 彼らは与えられたとおりです-

ifeq (arg1, arg2)
ifeq 'arg1' 'arg2'
ifeq "arg1" "arg2"
ifeq "arg1" 'arg2'
ifeq 'arg1' "arg2"

上記の条件の反対のディレクティブは次のとおりです-

ifneq (arg1, arg2)
ifneq 'arg1' 'arg2'
ifneq "arg1" "arg2"
ifneq "arg1" 'arg2'
ifneq 'arg1' "arg2"

条件付きディレクティブの例

libs_for_gcc = -lgnu
normal_libs =

foo: $(objects)
ifeq ($(CC),gcc)
   $(CC) -o foo $(objects) $(libs_for_gcc)
else
   $(CC) -o foo $(objects) $(normal_libs)
endif

includeディレクティブ

  • includeディレクティブ*を使用すると、 make は現在のメイクファイルの読み取りを一時停止し、続行する前に1つ以上の他のメイクファイルを読み取ります。 ディレクティブは、次のように見えるメイクファイル内の行です-
include filenames...

ファイル名には、シェルファイル名のパターンを含めることができます。 行の先頭では余分なスペースを使用できますが、タブは使用できません。 たとえば、3つの「.mk」ファイル、つまり「a.mk」、「b.mk」、および「c.mk」、および$(bar)がある場合、bish bashに展開され、次に表現。

include foo *.mk $(bar)

is equivalent to:

include foo a.mk b.mk c.mk bish bash
*make* がincludeディレクティブを処理すると、makefileの読み取りを一時停止し、リストされた各ファイルから順番に読み取ります。 それが終了すると、 *make* はディレクティブが含まれるmakefileの読み取りを再開します。

オーバーライドディレクティブ

コマンド引数で変数が設定されている場合、makefile内の通常の割り当ては無視されます。 コマンド引数で設定された変数をメイクファイルに設定したい場合は、オーバーライドディレクティブを使用できます。

override variable = value

or

override variable := value