免責事項:この記事はCSDNブロガー元の記事「haoel」で、CC 4.0 BY-SAの著作権契約書に従って、再現し、元のソースのリンクと、この文を添付してください。
オリジナルリンクします。https://blog.csdn.net/haoel/article/details/2892
----使用変数
のMakefile変数で定義され、C / C ++マクロ言語のように、彼はそれが自動的に使用中に配備された元モデルでMakefileの実行テキスト文字列を表し、場所。C / C ++差があると、あなたはMakefileの値を変更することができます。Makefileで、変数は、「標的」、「標的依存性」、「コマンド」またはメイクファイルの他の部分で使用することができます。
「:」、「#」、「=」または空の文字(スペース、改行など)変数名の文字、数字、アンダースコアを(数字で始めることができます)を含めることができますが、含有してはならないと命じました。変数は大文字と小文字が区別され、「foo」という、「foo」と「FOO」は三つの異なる変数名です。伝統的なMakefileの変数名はすべて大文字の命名ですが、私のような、ケースと変数名を使用することをお勧めします:MAKEFLAGS。そして、システム変数の競合を回避するために、そして事故が起こりました。
いくつかの非常に奇妙な文字列変数のような、あります「$ <」、「$ @」というように、これらの変数は自動化されている、私は後で説明します。
基本1.変数
DECLARE変数は、アップ含む変数に「{}」使用中に、時の初期値を与えられる変数名の前に「$」記号を追加する必要性を必要とするが、好ましくは、かっこで「()」またはブレース。あなたが本当の「$」の文字を使用したい場合は、で表現する必要がある「$$」。
変数には、「ターゲット」、「依存性」、「注文」と新たな変数のルールとして多くの場所で使用することができます。例を見てください:
オブジェクト= program.o foo.oのutils.o プログラム:$(オブジェクト) のcc -oプログラム$(オブジェクト)
$(オブジェクト):defs.h
変数は、たとえば、のような、場所を正確にちょうどC / C ++のマクロのように、それを使用する展開します。
FOO = C
prog.o:PROG $(FOO)
$(FOO)$(FOO) - $(FOO)PROG $(FOO)。
拡張GET:
prog.o:prog.cの
CC C prog.cの
もちろん、ので、ここであなたのMakefile中で乾燥されていないことは、使用のポイントで展開Makefileの変数の実際の外観を示すための単なる一例です。これは、「置換」の原則であることを示しています。
また、完全に安全なため、変数の括弧にあなたは括弧内に変数を追加したくない場合は、上記の例では、この変数を使用し、それはすることができますが、私は強く括弧内に変数を追加することをお勧めいたします。
2.変数変数
変数の値を定義する場合、我々は他の変数を構築するために、変数の値を使用することができ、Makefileの変数の変数値の定義を使用する2つの方法があります。
「=」を使用するのは簡単である第一の方法、を見ては、「=」は、左側の変数であり、右側は、変数の値であり、変数の右辺の値、すなわち、いずれかの文書に定義することができます。右変数は必ずしも値は以下に定義する値を使用することができる、定義されているれていません。以下のような:
FOO = $(バー) バー = $(ぐふ) ぐふ =はぁ? すべて: エコー$(FOO)
私たちは、$(FOO)の値が$(バー)である(変数$(FOO)値が再生されます "えっ?" を "すべてが作る" を実行、$(バー)の値が$(ぐふ)で、$(ぐふ)値が「え?」)が表示され、あなたは変数が定義された変数の背中を使用することができます。
この機能は、悪い場所がある、良い場所です、良い場所は、我々は変数の真の価値を置くことができるなど、定義に押し戻さ:
CFLAGS = $(include_dirs)-O
include_dirs = -Ifoo -Ibar
「CFLAGSは」コマンドで展開されている場合、それは「-Ifoo -Ibar -O」だろう。ただし、このフォームが悪い場所があり、そしてそれは、次のような再帰的定義、次のとおりです。
CFLAGS = $(CFLAGS) - O 或: A = $(B) B = $(A)
もちろん、私たちはこのような定義を検出する能力を持たせる、プロセスの無限の変数を展開するようになります、と文句を言うでしょう。あなたは変数に関数を使用する場合は、その後、この方法は、我々は非常に遅い操作を行いますがあり、悪いことは、彼が2「ワイルドカード」の機能を利用すると、予測不可能なエラーが発生した「シェル」ということです。あなたが知っていないので、これらの二つの機能は何度も呼び出すことができます。
この上記の方法を避けるために、我々は、使用される変数で変数を作成する別の方法を定義することができます。、演算子:「=」この方法では、使用しています
以下のような:
X:= FOO Y: = $(x)は、バー のx: =後で
どちらに相当します。
Y:= FOOバー
X: =後で
この方法は、変数の後ろに変数の前に使用することができない、唯一の変数は以前は良いが定義されていることに言及する価値があります。その場合:
Y:= $(x)は、バー
のx: = FOO
だから、yの値は、代わりに「FOOバー」の「バー」、です。