2013-09-21 3 views
9

Я создаю проект с и когда я сделать мой Makefile и попробуйте запустить его это дает мне эту ошибку:Makefile: 1: *** отсутствует разделитель. Стоп

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 

Кроме того, это я правильно понял все вкладки.

+0

возможно, после Libs_Defines.o? – Leeor

+0

как насчет окончания линии? – nothrow

+0

Makefile, как правило, очень придирчив к пространству и вкладкам –

ответ

15

Это проблема с вкладками. Некоторые текстовые редакторы могут заменять вкладки белыми пробелами, убедитесь, что вы используете правильный текстовый редактор, который не испортит его. Откройте ваш make-файл в vi или любом другом рудиментарном редакторе и перепишите этот make-файл.

Обратите внимание, что после каждого целевого правила одна единственная вкладка должна быть размещена в начале строки. Все, что приходит после этой вкладки, передается оболочке (может быть больше вкладок, пробелов и всего, что вы хотите, но имейте в виду, что в начале строки должна быть вкладка).

+0

Я использую текстовый редактор на Mac, вы рекомендуете другого? –

+0

Неверно, что разрешена только одна единственная tab_. Правило состоит в том, что первый символ в строке должен быть символом TAB. После этого вы можете делать все, что хотите, для остальной части строки (больше вкладок, пробелов и т. Д.). Что бы ни было передано в оболочку, которая будет выполнена. – MadScientist

+0

@ JoãoMiranda Я не знаю, никогда не был на Mac, но я уверен, что есть другие возможности. –

0

Марка очень чувствительна к тому, что правила и цели имеют отступ. Сообщение об ошибке, как правило, вызвано отступом правила цели с пробелами вместо одной вкладки.

, например:

target: 
    do stuff 

будет ошибка, но

target: 
<tab>do stuff 

не будет.

+1

Это все с вкладками, есть ли еще одна причина для этой ошибки? И почему это отображается в строке 1? –

+0

@ JoãoMiranda иногда текстовые редакторы вставляют пробелы, даже когда вы нажимаете клавишу вкладки. вы ** действительно уверены, что это символы табуляции? Попробуйте запустить самый простой текстовый редактор в вашей системе и посмотрите, действительно ли символы являются вкладками. –

7

вы можете попробовать работаете -

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

(после сохранения резервной копии, конечно)

+0

Он извлекает ту же ошибку, когда я пытаюсь $ make Makefile снова –

+0

Вы открыли/сохранили Makefile в редакторе, прежде чем перезапускать его? – Leeor

+0

Лучший ответ - и избегайте касания файла с помощью редактора после этой команды perl перед запуском make –

0

на самом деле я сталкивался с подобной проблемой каждая вещь была права, но позже я понял я использую г-редактировать больной скажите решение edit> preferances> вкладка редактора> снимите флажок (вставьте пробелы вместо вкладок) , и все получилось просто отлично

0

Возможно, вы используете mo dern, который понимает стандарт Unicode. - Даже если вы откроете ANSI-файл в этих редакторах, они обычно сохраняют их обратно как UTF-8, что очень обратная совместимость, за исключением того, что он помещает два «невидимых» байта в начале файла, поэтому что другие программы будут знать, в каком формате кодируется текст. - Вот почему «ошибка» сообщается в строке 1.

Если вы используете Notepad для Windows, вам повезло, поскольку есть возможность переопределить это поведение и сохранить файл в папке " ANSI ". Вот как:

  1. Файл -> Сохранить как
  2. Изменить «Сохранить как тип» на «Все файлы».
  3. Найдите точное местоположение файла Makefile (иногда, сохраняйте, как ставит вас в другой каталог, я не знаю, почему это произошло, но это продолжалось со мной).
  4. Измените имя файла с «Makefile» на «Makefile». - важен период трейлинга (без него он будет сохранен как «Makefile.txt», даже если выбран «Все файлы»).
  5. Изменить «Кодировка» с «UTF-8» на «ANSI».

    Save with ANSI Encoding

0

меня пойти окружающей среды и пытается скомпилировать и выполнить,

kubernetes project using make command

Но я получаю ошибку Makefile: 1: ** отсутствует разделитель. Стоп. и не удалось его скомпилировать.

kubernetes on github

go version go1.9.1 windows/amd64

0

Я просто встретиться с той же проблемой, когда compliling моего исходного кода с автогенерируемой GCC Makefile.

Наконец-то я обнаружил, что он был вызван символами спецификации utf-8 в начале файла makefile. Эти символы не видны в некоторых текстовых редакторах.

, попробуйте сохранить файл как utf-8 без спецификации.

Смежные вопросы