プログラミングユーティリティ

パラメータの引き渡し : make の簡単なマクロ

make のマクロ置換は、メークファイル内でパラメータをコマンド行に渡す際に便利です。cc -O オプションを使用して、program という最適化されたプログラムを、コンパイルする場合を例に挙げます。メークファイルに以下の例のようなマクロ参照functions のターゲットに追加して、パラメータをコマンド行に渡すことができます。

functions: functions.c 
         cc $(CFLAGS) -o functions functions.c

マクロ参照は、メークファイル内あるいは make コマンドの引数でユーザーが定義した値に対応する可変部分として機能します。makeCFLAGS マクロの値を定義すると、make はマクロ参照を指定された値に置換します。

$ rm functions
$ make functions "CFLAGS= -O"
cc -O -o functions functions.c

注 -

CFLAGS マクロへの参照は、.c.c.o の両方の暗黙の規則に含まれています。



注 -

コマンド行で指定できる引数は 1 つだけです。この例では、二重引用符で囲んである部分が引数定義を示しています。


マクロが未定義の場合は、make はマクロの参照先を空白の文字列とみなします。

メークファイル中にマクロを定義することもできます。デフォルトで最適化されたオブジェクトコードを make が生成するように、CFLAGS-O に設定するなどの用途があります。

CFLAGS= -O 
functions: functions.c 
         cc $(CFLAGS) -o functions functions.c

make のコマンド行の引数として指定されたマクロ定義は、条件付きマクロ定義を除き、メークファイル内の他の定義よりも優先されます。

たとえば、dbx または dbxtool を使用してデバッグするために functions をコンパイルするには、コマンド行で CFLAGS の値を -g として定義します。

$ rm functions 
$ make CFLAGS=-g 
cc -g -o functions functions.c

gprof を使用してプロファイル用に functions をコンパイルするには、-O および -pg の両方を CFLAGS の値として指定します。

マクロ参照は、マクロ名が 2 文字以上の長さの場合は、括弧で囲む必要があります。マクロ名が 1 文字だけの場合は、括弧を省略できます。括弧の代わりに中括弧 { と } を使用することもできます。たとえば、'$X'、'$(X)'、'${X}' はすべて同じ意味です。