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

时间:2013-09-21 18:53:24

标签: c makefile

我正在c上创建一个项目,当我创建我的Makefile并尝试运行它时,它给了我这个错误:

Makefile:1: *** missing separator.  Stop.

我的makefile代码是:

CC=gcc
OBJ=./objetos
INC=./include
FON=./aqsFonte
BIB=./bibliotecas
OPBIB=-lBiblioteca
ProjetoFinal: libFinal.a 
    $(CP) $(FON)/ProjetoFinal.c -I$(INC) -L$(BIB) $(OPBIB) -o ProjetoFinal

Bibliotecas.a: Caminho.o Libs_Defines.o Matrizes.o Proc_Imagens.o Vetores.o
    ar -q $(BIB)/libFinal.a Caminho.o ibs_Defines.o Matrizes.o Proc_Imagens.o Vetores.o

Caminho.o:
    $(CP) $(FON)/Caminho.c -o Caminho.o
Libs_Defines.o :
    $(CP) $(FON)/Libs_Defines.c -o Libs_Defines.o
Matrizes.o:
    $(CP) $(FON)/Matrizes.c -o Matrizes.o
Proc_Imagens.o: 
    $(CP) $(FON)/Proc_Imagens.c -o Proc_Imagens.o
Vetores.o:
    $(CP) $(FON)/Vetores.c -o Vetores.o

此外,我猜它都是正确的标签。

7 个答案:

答案 0 :(得分:26)

这是标签问题。某些文本编辑器可能会使用空格替换制表符,请确保使用不会弄乱它的正确文本编辑器。在vi或任何其他基本编辑器中打开makefile,然后重写该makefile。

请注意,在每个目标规则之后,一个标签必须放在该行的开头。该选项卡之后的所有内容都会传递给shell(可以有更多选项卡,空格和任何您想要的内容,但请记住,行的开头必须有一个选项卡。)

答案 1 :(得分:9)

你可以尝试跑步 -

perl -pi -e 's/^  */\t/' Makefile

(当然保存备份后)

答案 2 :(得分:1)

make对规则和目标缩进的方式非常敏感。您发布的错误通常是通过用空格而不是单个标签缩进目标规则引起的。

例如:

target:
    do stuff

会出错,但

target:
<tab>do stuff

不会。

答案 3 :(得分:0)

实际上我遇到了类似的问题 一切都是对的,但后来我明白了 我用g-edit生病告诉解决方案 编辑&gt; preferances&gt;编辑器选项卡&gt;取消选中按钮(插入空格而不是制表符) 它运作得很好

答案 4 :(得分:0)

您可能正在使用了解unicode标准的现代文本编辑器。 - 即使你在这些编辑器中打开一个ANSI文件,他们通常会将它们保存为UTF-8 - 这是非常向后兼容的,除了它在文件的开头放置两个“不可见”字节,所以其他程序将知道文本编码的格式。 - 这就是第1行报告“错误”的原因。

如果您正在使用Windows记事本,那么很幸运,因为有一个选项可以覆盖此行为并以“ANSI”格式保存文件。方法如下:

  1. 文件 - &gt;另存为
  2. 将“另存为类型”更改为“所有文件”。
  3. 找到Makefile的确切位置(有时候,除了把你放在一个不同的目录中,我不知道为什么会这样,但它一直发生在我身上)。
  4. 将文件名从“Makefile”更改为“Makefile”。 - 尾随期间很重要(没有它,它将被保存为“Makefile.txt”,即使选择“所有文件”)。
  5. 将“编码”从“UTF-8”更改为“ANSI”。

    Save with ANSI Encoding

答案 5 :(得分:0)

我在使用自动生成的gcc makefile编译源代码时遇到了同样的问题。

我终于发现它是由makefile开头的utf-8 BOM字符引起的。这些字符在某些文本编辑器中是不可见的。

所以尝试将文件保存为utf-8而不使用BOM。

答案 6 :(得分:0)

这也可能是由于.PHONY和您的目标之间缺少冒号

.PHONY all 
all:
<tab><do this>

抛出错误 虽然下面的效果很好

.PHONY: all 
all:
<tab><do this>