makefile问题

时间:2010-09-02 14:11:21

标签: c makefile

hiii,我刚刚开始研究makefile,并为一个简单的hello.c文件编写了下面的文件。它显示了一些错误说:

  

makefile1:5:***缺少分隔符。停止。

这里有什么不对......?

 CC=gcc
    CFLAGS=-c -Wall

    hello: hello.c
    $(CC) $(CFLAGS) hello.c -o hello

    clean:
     rm -rf *.o

并且,使用makefile是否总是更好的选择,或者有任何特定情况不使用它们?

如果我错在任何地方,请纠正我......

4 个答案:

答案 0 :(得分:2)

在编写规则以生成目标之前,请确保没有遗漏任何标签:

CC=gcc
CFLAGS=-c -Wall

hello: hello.c
<TAB>$(CC) $(CFLAGS) hello.c -o hello

.PHONY: clean
clean:
<TAB>rm -rf *.o

编写.PHONY很好。您可以找到原因here

答案 1 :(得分:1)

首先,您的目标不应缩进。其次,确保使用制表符而不是空格来缩进。

CC=gcc
CFLAGS=-c -Wall
.PHONY: clean # There's no clean file.
hello: hello.c
    $(CC) $(CFLAGS) hello.c -o hello
clean:
    rm -rf *.o

至于你的另一个问题,makefiles随处可见。无论你是否喜欢它们,学习如何维护它们都是一个好主意。就个人而言,我喜欢他们有多神奇。他们可以节省大量时间。如果您发现自己必须调试复杂的时间,它们也可能是可怕的时间下沉。

答案 2 :(得分:0)

“缺少分隔符”表示您可能没有在CC或rm行中使用制表符。尝试重新格式化文件,如下所示

CC=gcc
CFLAGS=-c -Wall

hello: hello.c
<TAB>$(CC) $(CFLAGS) hello.c -o hello

clean:
<TAB>rm -rf *.o

Make是挑剔的,因为所有命令行必须带有制表符。不是4个空格,不是8个空格,而是实际的选项卡(ASCII 0x09)。

答案 3 :(得分:0)

除了缩进问题,你应该从CFLAGS中删除-c,否则生成的hello将不是可执行文件,而是没有正确名称的.o文件。