macro = string マクロ定義 $(macro) マクロ参照先出の例をマクロを使って書き直すと次のようになります。
OBJECTS = prog.o x.o y.o z.o LIBES = prog: $(OBJECTS) cc $(OBJECTS) $(LIBES) -o $@ x.o y.o: defs.hマクロはユーザが定義したもの以外に、make 自身がもつものがあります。 またマクロは環境変数や make のマクロ定義オプション(-D) によって実行時に 外部から定義することができます。 (→makefile を使わない make コマンドの使い方)
さらに $@ のように定義ファイル内でのみ有効なマクロ(インターナル・マクロ)が あります。
マクロ名 | 意味 |
---|---|
$@ | ターゲット名 |
$< | 入力ファイル(アクションの引き数) |
$? | ターゲットより若いファイル |
$* | コンポーネント(処理対象)のベース部分(サフィックスの除いた部分) |
キーワード | 意味 |
---|---|
.SILENT: | 実行中のコマンド表示を抑制する。 |
.IGNORE: | アクションの途中でエラーが発生しても無視して続ける |
.DEFAULT: | ルールにないターゲットを指定された場合に採用されるターゲット |
.SUFFIXES: | ユーザ定義サフィックスの優先順位の定義 |
.DEFAULT: は、例えば次のような事です。
$ cat makefile .DEFAULT: @echo "hoge hoge" all: @echo "make all?" sample: @echo "TEST" $ make 特にターゲットを指定しないと、最初なターゲットについて、 make all? アクションを実行 $ make sample TEST $ make sore hoge hoge
.SUFFIEXES: はユーザが独自にサフィックスルールを作成する際に必用です。 次の例では xxxx.c を lint や cxref などの解析ツールにかけ、それの結果を それぞれのツール名から連想されるファイルに保存する例です。
$ cat makefile .SUFFIXES:.c .xref .lint .flow .c.lint: $(LINT) $(LINTFLAGS) $< >$@ .c.flow: cflow -I . $< >$@ .c.xref: cxref -D CXREF -D DEBUG -I . -c $< >$@ $ make a.flow cflow -I . a.c >a.flow $ make a.xref cxref -D CXREF -D DEBUG -I . -c a.c >a.xref.SUFFIXES: に続くサフィックスのリストは、空白又は タブで区切ります
Section Next|Prev
|Up|Index|凡例