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是否总是更好的选择,或者有任何特定情况不使用它们?
如果我错在任何地方,请纠正我......
答案 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文件。