Section Next|Prev|Up|Index|凡例


3.1.6 その他

make に関する補足事項
アクションのハイフンとアットマーク
アクション・ラインのコマンドがハイフン(-)やアットマーク(@)で始まる場合は、 各行に対してキーワードと同等の処理を行います。

また、これらは @- や -@ の様に両方を指定することもできます。

	$ cat makefile
	kore:
		echo "1st line"
		ls /hoge
		echo "2nd line"
	dore:
		@echo "1st line"
		-@ls /hoge
		@echo "2nd line"

	$ make kore
	echo "1st line"	# 今から実行するコマンドを表示
	1st line	# 先のコマンドの実行結果
	ls /hoge
	ls: ファイル /hoge は存在しません
	*** Exit 2
	Stop.		# ここで処理が中断

	$ make dore
	1st line
	ls: ファイル /hoge は存在しません
	*** Exit 2 (ignored)
	2nd line


コロン(:)とダブルコロン(::)
ターゲットとそれを構成するソースの並びはコロン(:)又はダブルコロン(::)で区切り ます。 ただしコロン(:)の場合は、同じターゲットが複数出現することを禁止している のに対し、ダブルコロン(::) はそれを許します。

	$ cat makefile
	a: a.txt
		@echo "New a.txt"
	a: b.txt
		@echo "New a.txt"
		touch a
	b:: a.txt
		@echo "New a.txt"
		touch b
	b:: a.txt
		@echo "New b.txt"
		touch b

	$ touch b.txt
	$ make a
	Multiple rules lines for `a'	# ターゲット重複エラー
	Too many command lines for `a'
	New a.txt
	touch a 	# make は指定されたターゲット以外でも、

	$ touch a.txt	# ソースが変更されていると、そのターゲットについて、
	$ make b	# アクションを実行する
	Multiple rules lines for `a'
	New a.txt
	touch b
	New b.txt
	touch b
これはライブラリの作成など複数の構成要素をもつターゲットに対し有効です。
	prog: prog.o mylib.a
		ranlib mylib.a
		cc prog.o mylib.a -o prog
	mylib.a :: x.o
		ar ra mylib.a x.o
	mylib.a :: y.o
		ar r mylib.a y.o
	mylib.a :: z.o
		ar r mylib.a z.o
	x.o y.o: defs
	x.o : defsx
		cc -c -O  x.c

	$ make
	cc -c -O x.c
	ranlib mylib.a
	cc prog.o mylib.a -o prog

Section Next|Prev|Up|Index|凡例