为什么这个makefile不能工作?

时间:2013-04-06 08:15:47

标签: makefile gnu-make

我使用自动变量($@,$^)和模式(%)编写了以下makefile,但它无法与gnu make一起使用:

TARGET = edit
SRCS = $(wildcard *.c)
OBJS = $(SRCS:%.c=%.o)
$(TARGET) : $(OBJS)
    gcc $^ -o $(TARGET)
%.o : %.c
    gcc $< -c $@

我在工作目录中有foo.c,bar.c。  错误是:

gcc foo.c -c foo.o
gcc: foo.o: No such file or directory
make: *** [foo.o] Error 1

我对automatic variablespattern rules感到困惑,如何正确使用它们?他们有任何关系吗?

2 个答案:

答案 0 :(得分:1)

你的统治是错误的。它应该是:

%.o : %.c
    gcc -c $< -o $@

答案 1 :(得分:0)

如果您不是专家,那么带有所有这些符号的传统makefile语法就是cofusing。在makepp中,您可以使用自解释长名称(第二行不需要以制表符开头):

%.o : %.c
    gcc -c $(input) -o $(ouptut)

至于你的问题:虽然这些变量对于避免冗余的所有规则都很有用,但它们对模式规则至关重要。你怎么知道你的许多输入文件目前正在编译中。

makepp还有很多。除了做几乎所有GNU make之外,还有更多有用的东西,你甚至可以通过一些Perl编程扩展你的makefile。