Section Next|Prev|Up|Index|凡例


3.1.5 マクロとキーワード

マクロ
定義ファイルの記述にマクロ機能(≒変数)が用意されています。 マクロの定義/参照はそれぞれ次の様に行います。
	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 コマンドの使い方)

さらに $@ のように定義ファイル内でのみ有効なマクロ(インターナル・マクロ)が あります。
マクロ名 意味
$@ ターゲット名
$< 入力ファイル(アクションの引き数)
$? ターゲットより若いファイル
$* コンポーネント(処理対象)のベース部分(サフィックスの除いた部分)
またマクロの内容は make コマンド実行時に、コマンドラインから定義することもで きます。

キーワード
makefile に記述することで、処理全体に影響を与える特種なターゲットをキーワード と呼びます。
キーワード 意味
.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|凡例