38

我在 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

另外,我猜这一切都是正确的。

4

7 回答 7

52

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

请注意,在每个目标规则之后,必须在行首放置一个制表符。该选项卡之后的所有内容都传递到 shell(可以有更多的选项卡、空格和任何你想要的,但请记住,行首必须有一个选项卡)。

于 2013-09-21T18:58:17.970 回答
19

你能试试跑步吗?

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

(当然是在保存备份之后)

于 2013-09-21T19:03:10.443 回答
3

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

例如:

target:
    do stuff

会出错,但是

target:
<tab>do stuff

将不会。

于 2013-09-21T18:58:06.373 回答
3

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

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

在下面工作正常时抛出错误

.PHONY: all 
all:
<tab><do this>
于 2020-06-12T12:41:20.287 回答
0

实际上我遇到了类似的问题,每件事都是正确的,但后来我明白我使用 g-edit 告诉解决方案编辑>首选项>编辑器选项卡>取消选中按钮(插入空格而不是制表符),它工作得很好

于 2015-02-07T19:37:01.937 回答
0

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

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

所以尝试将文件保存为没有 BOM 的 utf-8。

于 2017-12-04T06:53:54.137 回答
0

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

如果您使用的是 Windows 记事本,那么您很幸运,因为有一个选项可以覆盖此行为并将文件保存为“ANSI”格式。就是这样:

  1. 文件 -> 另存为
  2. 将“保存类型”更改为“所有文件”。
  3. 找到 Makefile 的确切位置(有时,另存为会将您放在不同的目录中,我不知道为什么会发生这种情况,但它一直发生在我身上)。
  4. 将文件名从“Makefile”更改为“Makefile”。-- 尾随句点很重要(没有它,它将被保存为“Makefile.txt”,即使选择了“所有文件”也是如此)。
  5. 将“编码”从“UTF-8”更改为“ANSI”。

    使用 ANSI 编码保存

于 2016-03-13T06:44:11.207 回答