Makefile:2: *** 缺少分隔符。停止。

89

我有两个.cpp文件,分别是decryptor.cppprod-ent.cpp
我已经创建了一个Makefile来在Linux平台上编译这两个文件。

all: decryptor.cpp prod-ent.cpp
       g++ prod-ent.cpp -o prod-ent -g
       g++ decryptor.cpp -o decryptor -g -lcryptopp
clean:
       rm prod-ent
       rm decryptor

每当我尝试执行Makefile时,它会显示以下错误:

Makefile:2: * missing separator. Stop.

我是新手,不知道我的错误在哪里。请帮助我纠正代码。

提前感谢!!


6
Makefile中缩进很重要,请确保发布准确的版本。你发布的内容看起来有误(目标前有前导空格,allclean未对齐)。 - juanchopanza
1
我记得有几次在手动生成的makefile中遇到过这个问题...我认为你需要使用制表符来缩进编译命令,而不是一系列空格。 - rainbowgoblin
所有出现的地方在"g++"和"rm"前面都有制表符,文件名和选项之间都有空格。但仍然无法正常工作。 - user3686363
3
请确保您正在使用制表符而不是空格。 - Sorcrer
1
我之前也遇到了同样的问题,但是我换了一个不同的编辑器尝试后,它就可以使用制表符了。 - Kalarav Parmar
1个回答

194
你需要使用真正的制表符而不是空格来缩进g++rm命令。如果仍然失败,则说明你的编辑器正在插入空格,即使你按下键盘上的Tab键。你需要配置你的编辑器以插入硬制表符(ASCII中的09)。

比如:

all: decryptor.cpp prod-ent.cpp
*****g++ prod-ent.cpp -o prod-ent -g
*****g++ decryptor.cpp -o decryptor -g -lcryptopp
clean:
*****rm prod-ent
*****rm decryptor

请使用*****替换TAB。

您可以通过命令检查您的一侧。

cat -e -t -v  makefile

如果在一行开头使用了 TAB,那么它将以 ^I 开始,并以 $ 结尾。

此外,您也可以使用 ; 实现相同的效果。

all: decryptor.cpp prod-ent.cpp ; g++ prod-ent.cpp -o prod-ent -g ; g++ decryptor.cpp -o decryptor -g -lcryptopp
clean: ; rm prod-ent ; rm decryptor

1
改变了我的生活!! - Khaja Md Sher E Alam
这是问题所在。谢谢@Jayesh - Saad Ismail
为什么错误信息没有说这个? - Julius Naeumann

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接