0

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
4

1 回答 1

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

于 2012-05-22T19:54:57.537 回答