Makefile-ディレクティブ

さまざまな形式で利用できる多数のディレクティブがあります。ザ・makeシステム上のプログラムがすべてのディレクティブをサポートしているとは限りません。だからあなたのmake ここで説明しているディレクティブをサポートします。 GNU make これらのディレクティブをサポートします。

条件付きディレクティブ

条件付きディレクティブは次のとおりです。

  • ザ・ ifeqディレクティブは条件を開始し、条件を指定します。これには、コンマで区切られ、括弧で囲まれた2つの引数が含まれています。変数置換は両方の引数で実行され、次にそれらが比較されます。2つの引数が一致する場合、ifeqに続くmakefileの行に従います。それ以外の場合は無視されます。

  • ザ・ ifneqディレクティブは条件を開始し、条件を指定します。これには、コンマで区切られ、括弧で囲まれた2つの引数が含まれています。変数置換は両方の引数で実行され、次にそれらが比較されます。2つの引数が一致しない場合は、ifneqに続くmakefileの行に従います。それ以外の場合は無視されます。

  • ザ・ ifdefディレクティブは条件を開始し、条件を指定します。単一の引数が含まれています。指定された引数が真の場合、条件は真になります。

  • ザ・ ifndefディレクティブは条件を開始し、条件を指定します。単一の引数が含まれています。指定された引数がfalseの場合、条件はtrueになります。

  • ザ・ else前の条件が失敗した場合、ディレクティブにより次の行が実行されます。上記の例では、これは、最初の代替が使用されない場合は常に2番目の代替リンクコマンドが使用されることを意味します。条件にelseを含めることはオプションです。

  • ザ・ endifディレクティブは条件を終了します。すべての条件はendifで終了する必要があります。

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

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

conditional-directive
   text-if-true
endif

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

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

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

条件がtrueの場合、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 directive 許可します make続行する前に、現在のメイクファイルの読み取りを一時停止し、1つ以上の他のメイクファイルを読み取ります。ディレクティブは、次のように見えるmakefile内の行です-

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

いつ makeincludeディレクティブを処理し、makefileの読み取りを一時停止し、リストされている各ファイルから順番に読み取ります。それが終わったら、make ディレクティブが表示されているmakefileの読み取りを再開します。

オーバーライド指令

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

override variable = value

or

override variable := value