为什么不链接到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
答案 0 :(得分:3)
模式规则必须有与之关联的配方。没有配方的任何模式规则都会告诉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的内置规则处理它。