4. Maiefile - 自動変数

 
4.1 自動変数
4.2 拡張

4.1 自動変数

変数 意味
$@ ターゲット。
$% ライブラリの構成指定中の要素を表します。というのがマニュアルの説明なのですがようわからんですな。
$< 必須項目の先頭。
$? ターゲットよりも後で更新された必須項目のすべてを、スペースで区切ったリストで表します。これもようわからんです。
$^ すべての必須項目をスペースで区切ったリストで表します。重複ファイルは取り除かれるそうです。
$+ $^と同様にすべての必須項目をスペースで区切ったリストで表します。が、これは重複ファイルは重複のままだそうです。
$* ターゲットファイル名の一部を表します。一部とはサフィックスを除いたファイル名を示すのが普通です。
という説明なのですが、カッコ書で(どのようにファイル名の一部を作り出すかは「パターンルール」で扱います)と説明されているように、いささか複雑です。

 これをわかっている範囲で書くならば

main.c
 というファイルがあって、コンパイルしてオブジェクトを作成する Makefile を書くならば

CC	= clang

target  : main.o
	$(CC) -o main main.o

.c.o	:
	$(CC) -c $< -o $@
 これは、くっきり動作します。

4.2 拡張

 「D」と「F」というキーワードを用いて、前項の自動変数のうちのディレクトリとファイルの部分を取り出すことができます。  すなわち

/home/hoge/obj/piyo.o : /home/hoge/src/piyo.c
 というルールが存在するとき
シンボル 意味
$(@F) piyo.o を示します。
$(<D) /home/hoge/src を示します