リンクを作成しないのはなぜfoo.o
ですか?
$ ls
foo.c foo_test.c Makefile
$ cat Makefile
.PHONY: test
test: foo_test
%_test: %_test.o foo.o
$ make
cc foo_test.c -o foo_test
リンクを作成しないのはなぜfoo.o
ですか?
$ ls
foo.c foo_test.c Makefile
$ cat Makefile
.PHONY: test
test: foo_test
%_test: %_test.o foo.o
$ make
cc foo_test.c -o foo_test
パターンルールには、それらに関連付けられたレシピが必要です。レシピのないパターンルールは、GNUmakeにそのパターンルールを削除するように指示します。だから、あなたのライン:
%_test: %_test.o foo.o
%_test
から構築する存在しないパターンルールを削除する以外は何もしません%_test.o
。レシピを有効にするには、レシピを作成する必要があります。
%_test: %_test.o foo.o
$(CC) -o $@ $(LIBS) $^
または何でも。ただし、これはあなたの例では完全に必要ではありません。そのためのルールはまったく必要ありません。次のように記述してください。
foo_test: foo_test.o foo.o
makeの組み込みルールで処理します。