0

$@,$^我使用自动变量( )和模式( )编写了以下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 variables我对and感到很困惑pattern rules,如何准确地使用它们?而且他们有什么关系吗?

4

2 回答 2

1

你的规则是错误的。它应该是:

%.o : %.c
    gcc -c $< -o $@
于 2013-04-06T08:20:05.127 回答
0

如果您不是专家,带有所有这些符号的传统 makefile 语法会令人困惑。在makepp 中,您可以使用自我解释长名称(并且第二行不需要以选项卡开头):

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

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

makepp 还有很多。除了做 GNU make 能做的几乎所有事情,还有很多有用的东西,你甚至可以用一些 Perl 编程来扩展你的 makefile。

于 2013-04-07T12:02:42.783 回答