Why doesn't Make link to 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
Why doesn't Make link to 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
模式规则必须有一个与之关联的配方。任何没有配方的模式规则都会告诉 GNU make 删除该模式规则。所以,你的行:
%_test: %_test.o foo.o
%_test
除了删除要构建的不存在的模式规则之外,什么都不做%_test.o
。如果您希望它生效,您需要创建一个配方:
%_test: %_test.o foo.o
$(CC) -o $@ $(LIBS) $^
管他呢。但是,这对于您的示例完全没有必要。您根本不需要任何规则,只需编写:
foo_test: foo_test.o foo.o
让 make 的内置规则来处理它。