December 12, 2020

パターンルール

ルールの target と prerequisites には % を含むパターンが書けます。

%.o : %.c ; recipe...

target の % と prerequisites の % は一致していなければならず、この例では main.c が存在しないので main.o は作れません。 hoge.c が存在するため hoge.o は作れます。

%.o: %.c
	gcc $< -o $@
$ ls *.c
hoge.c
$ make main.o
make: *** No rule to make target 'main.o'.  Stop.
$ make hoge.o
gcc hoge.c -o hoge.o

prerequisites なしで target のみでも書けますし、後方一致も書けますが、部分一致は書けません。

%.echo:
	echo $@

fuga.%: hoge.%
	ln -s $< $@

%hoge%:
	echo $@ $<
$ make vaa.echo
echo vaa.echo
vaa.echo
$ make fuga.c
ln -s hoge.c fuga.c
$ make fuga.o
gcc fuga.c -o fuga.o
$ make _hoge_
make: *** No rule to make target '_hoge_'.  Stop.

リンク