为什么Make会忽略我的通配符规则?

时间:2012-05-22 17:39:50

标签: makefile

为什么不链接到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

1 个答案:

答案 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的内置规则处理它。