Makefile:1: *** missing separator. Stop

2019-01-15 18:05发布

I'm creating a project on c and when i make my Makefile and try to run it it gives me this error:

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

My makefile code is:

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

Also, it's all tabbed correctly I guess.

标签: c makefile
6条回答
甜甜的少女心
2楼-- · 2019-01-15 18:24

can you try running -

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

(after saving a backup of course)

查看更多
不美不萌又怎样
3楼-- · 2019-01-15 18:28

You're probably using a modern text editor that understands the unicode standard. -- Even if you open an ANSI file in these editors, they'll usually save them back out as UTF-8 -- which is very backwards compatible, except that it places two "invisible" bytes at the beginning of the file, so that other programs will know what format the text is encoded with. -- This is why the "error" is reported on line 1.

If you're using Notepad for Windows, you're in luck, as there is an option to override this behavior and save the file in the "ANSI" format. Here's how:

  1. File -> Save As
  2. Change "Save as type" to "All Files".
  3. Find the exact location of the Makefile (sometimes, save as puts you in a different directory, I don't know why this happened but it kept happening to me).
  4. Change the file name from "Makefile" to "Makefile." -- the trailing period is important (without it, it will be saved as "Makefile.txt", even when "All Files" is selected).
  5. Change "Encoding" from "UTF-8" to "ANSI".

    Save with ANSI Encoding

查看更多
Emotional °昔
4楼-- · 2019-01-15 18:30

It's a tabs problem. Some text editors may replace tabs with white spaces, make sure you use a proper text editor that doesn't mess it up. Open your makefile in vi or any other rudimentary editor, and rewrite that makefile.

Note that after each target rule, one single tab must be placed in the beginning of the line. Everything that comes after that tab is passed on to the shell (there can be more tabs, spaces, and whatever you want, but keep in mind that there must be a tab in the beginning of the line).

查看更多
We Are One
5楼-- · 2019-01-15 18:41

I just meet the same problem when compliling my source code with auto generated gcc makefile.

I finally found it was caused by the utf-8 BOM characters at the beginning of the makefile.These charaters are invisible in some text editors.

so try save the file as utf-8 without BOM.

查看更多
Ridiculous、
6楼-- · 2019-01-15 18:47

actually i faced a similar problem every thing was right but later i understood i use g-edit ill tell the solution edit>preferances>editor tab>uncheck the button (insert spaces instead of tabs) and it worked just fine

查看更多
太酷不给撩
7楼-- · 2019-01-15 18:48

make is very sensitive on the way rules and targets are indented. The error you post is usually caused by indenting the rule of a target with spaces instead of a single tab.

for example:

target:
    do stuff

will error, but

target:
<tab>do stuff

will not.

查看更多
登录 后发表回答