2014-02-11 3 views
1

Я прочитал похожие вопросы, но не смог найти решение для моей проблемы. Вот Makefile в вопросе:Ошибка Makefile: неожиданный конец строки

EXE = proj05 
SOURCES = proj05.support.c proj05.driver.c 
OBJECTS := $(SOURCES:%.c=%.o) 
CCFLAGS = -Wall 

$(EXE): $(OBJECTS) 
<tab>$(CC) $^ -o [email protected] o 
clean: 
<tab>$(RM) $(EXE) $(OBJECTS) 

Когда я пытаюсь запустить сделать, я получаю сообщение об ошибке сказав «неожиданный конец строки видно» на линии 4. Что происходит?

Редактировать: Я изменил сумасшедший дубликат, но все равно получаю ту же ошибку.

+0

GNU make никогда не печатает сообщение об ошибке со словом «неожиданно» в нем где угодно. Это действительно точное сообщение об ошибке (вы никогда не должны перефразировать сообщения об ошибках при обращении за помощью: всегда вырезать и вставлять полное точное сообщение)? Если это так, то либо вы не используете GNU make (просьба указать, какую ОС и заставить вас использовать), либо эта ошибка не генерируется make. Скорее всего, это проблема в том, какой исходный файл компилируется, когда вы получаете эту ошибку. Опять же, если вы вырезали и вставляли сообщения об ошибках, это было бы ясно сразу же и сэкономило бы массу путаницы. – MadScientist

+0

Хорошо, точное сообщение об ошибке: «make: Fatal error in reader: makefile, строка 4: Неожиданный конец строки» «Это на SunOS, так что не GNU make. – spartanhooah

+0

Я не могу помочь. Мое подозрение в том, что во время вырезания и вставки из Powerpoint (!) В строке 4 закрался какой-то специальный символ, отличный от ASCII, что трудно понять. Возможно, '-' в' -Wall' не является дефисом ASCII (код 45), но некоторые расширенные символы em или enash, которые Solaris make не распознает. Я бы попытался ввести этот make-файл или, по крайней мере, строку 4, с нуля с помощью простого текстового редактора, такого как vi или Emacs. В качестве альтернативы вы можете использовать что-то вроде 'od -a Makefile' и посмотреть, есть ли какие-то странные символы в строке 4. – MadScientist

ответ

1

Что с одним долларом при первой команде?

<tab>$(CC) >>$<< $(CC) ... 
1

«линия 4» немного вводит в заблуждении, но это линия из $(EXE) правил, которые делают анализатор -х получил, прежде чем решить, что не может продолжаться дальше. Поскольку @ jia103 ссылается на , у вас есть ложный $ в правиле $ (EXE). У вас также есть то, что появляется , чтобы быть неправильным синтаксисом флага компилятора - не должно быть пробелов между - и o для формирования вывода arg -o [email protected].

Я предлагаю следующие правила, а не правила $(EXE) и clean что у вас есть?

%.o: %.c 
<tab>$(CC) $(CFLAGS) -o [email protected] $< 

$(EXE): $(OBJECTS) 
<tab>$(CC) $(CFLAGS) -o [email protected] $(OBJECTS) 

clean: 
<tab>$(RM) $(EXE) $(OBJECTS) 

(помня, чтобы изменить фактический символ табуляции ...)

Одно последнее дело - если вы используете Solaris и Sun Make, есть приличный шанс, что ваш компилятор с фактически Solaris студии , В этом случае флаг -Wall не работает - это флаг gcc. Utter cc -flags, чтобы узнать, какие опции доступны в Studio C.

+0

Это то, что я получаю для копирования из PowerPoint, а не для проверки его достаточно тщательно! – spartanhooah

+0

Я отредактировал свое оригинальное сообщение, потому что даже после исправления материала borked я все равно получаю ту же ошибку. – spartanhooah

+0

Во-первых, у вас все еще есть ложная пробная версия 'o' на вашей линии $ (CC). Во-вторых, что вы ожидаете от '$ ^' для расширения? –

0

Вам не нужны пустые строки между разными разделами? У Джеймса есть цель %.o:, за которой следует пустая строка, а затем цель $(EXE):, за которой следует пустая строка, за которой следует цель clean:.

Теперь, когда я думаю об этом, я считаю, что пустые строки не являются необязательными.

В своем фрагменте попробуйте поместить пустую строку между тем, который начинается с <tab> и того, который начинается с clean:.

+0

Вам не нужна пустая строка между правилами. На самом деле вы можете даже писать такие правила: '% .o:% .c; $ (COMPILE.c) $ (CFLAGS) -o $ @ $ <' ... если хотите. Иногда это подходящий способ выражения, иногда это не так. –

1

Возможно, у вас есть выражения новой строки для другой системы (например, символы новой строки Windows в make-файле Unix).

Вы можете исправить это в Notepad ++: edit-> EOL conversion-> Unix (или Windows или Old Mac), или вы можете повторно вводить символы новой строки вручную на машине, на которой вы компилируете.

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