簡體   English   中英

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

[英]Makefile:1: *** missing separator. Stop

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

另外,我猜它的標簽都正確。

這是標簽問題。 某些文本編輯器可能會用空格替換制表符,請確保使用不會弄亂的合適的文本編輯器。 在 vi 或任何其他基本編輯器中打開您的 makefile,並重寫該 makefile。

請注意,在每個目標規則之后,必須在行的開頭放置一個選項卡 該制表符之后的所有內容都傳遞給外殼程序(可以有更多制表符、空格和任何您想要的,但請記住,行的開頭必須有一個制表符)。

你可以試試跑步嗎 -

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

(當然保存備份后)

也可能是由於 .PHONY 和您的目標之間缺少冒號

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

在下面工作正常時拋出錯誤

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

make 對規則和目標的縮進方式非常敏感。 您發布的錯誤通常是由使用空格而不是單個制表符縮進目標規則引起的。

例如:

target:
    do stuff

會出錯,但是

target:
<tab>do stuff

將不會。

我在 vscode 中編寫C++並遇到了同樣的問題。

問題是vscode插入空格而不是制表符,你的文本編輯器可能也在做同樣的事情,但你沒有注意到。

如果您使用的是vscode ,請將此行添加到您的settings.json文件中:

// Will control if the editor will insert spaces for tabs. values = <"auto" | true | false>
"editor.insertSpaces": false,

如果這不起作用,請嘗試從另一個文本編輯器(例如(Vim,記事本,...)打開您的Makefile ,然后從那里插入標簽,應該正確插入標簽,除非您對該文本編輯器也有同樣的問題。


獎金

如果你使用的是vscode你可以通過選擇它來檢查當前字符是空格還是制表符,那么vscode將表示:

  • 選項卡:
  • 空間:

描述 vscode 如何表示選擇下的空格和制表符的照片

實際上我遇到了類似的問題,每件事都是對的,但后來我明白我使用 g-edit 告訴解決方案編輯>首選項>編輯器選項卡>取消選中按鈕(插入空格而不是選項卡),它工作得很好

您可能正在使用理解 unicode 標准的現代文本編輯器。 -- 即使你在這些編輯器中打開一個 ANSI 文件,它們通常也會將它們保存為 UTF-8 -- 這是非常向后兼容的,除了它在文件的開頭放置了兩個“不可見”字節,所以其他程序將知道文本的編碼格式。 -- 這就是第 1 行報告“錯誤”的原因。

如果您使用的是 Windows 版記事本,那么您很幸運,因為有一個選項可以覆蓋此行為並將文件保存為“ANSI”格式。 就是這樣:

  1. 文件 -> 另存為
  2. 將“保存類型”更改為“所有文件”。
  3. 找到 Makefile 的確切位置(有時,另存為會將您放在不同的目錄中,我不知道為什么會發生這種情況,但它一直發生在我身上)。
  4. 將文件名從“Makefile”更改為“Makefile”。 -- 尾隨句點很重要(沒有它,即使選擇了“所有文件”,它也會保存為“Makefile.txt”)。
  5. 將“編碼”從“UTF-8”更改為“ANSI”。

    使用 ANSI 編碼保存

在使用自動生成的 gcc makefile 編譯我的源代碼時,我遇到了同樣的問題。

終於發現是makefile開頭的utf-8 BOM字符造成的。這些字符在一些文本編輯器中是不可見的。

所以嘗試將文件保存為沒有 BOM 的 utf-8。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM