Ошибки make-файла Unix "'ake: фатальная ошибка: не знаю, как сделать (c файл здесь)" - PullRequest
1 голос
/ 17 февраля 2010

Я написал следующий make-файл:

hw2p1: hw2p1_main.o hw2p1_getit.o hw2p1_parseit.o hw2p1_moveit.o hw2p1_showit.o
    gcc hw2p1_main.o hw2p1_getit.o hw2p1_parseit.o hw2p1_moveit.o hw2p1_showit.o
hw2p1_main.o: hw2p1_main.c
    gcc -c hw2p1_main.c
hw2p1_getit.o: hw2p1_getit.c
    gcc -c hw2p1_getit.c
hw2p1_parseit.o: hw2p1_parseit.c
    gcc -c hw2p1_parseit.c
hw2p1_moveit.o: hw2p1_moveit.c
    gcc -c hw2p1_moveit.c
hw2p1_showit.o: hw2p1_showit.c
    gcc -c hw2p1_showit.c

В первый раз, когда я попытался вызвать make, я получил ошибку: "make: Неустранимая ошибка: замечен неожиданный конец строки" Я удалил пустые строки между целями и снова вызвал make, но на этот раз я получил "'ake: Неустранимая ошибка: не знаю, как сделать hw2p1_main.c "

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

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

Ответы [ 7 ]

1 голос
/ 17 февраля 2010

Вы, похоже, пропускаете -o в команде линковки, хотя, вероятно, это еще не то, что вы думаете. Немедленная жалоба заключается в том, что make не может найти этот файл .c. Уверен, что он есть в текущем рабочем каталоге?

1 голос
/ 17 февраля 2010

Это может произойти, если каталог случайно не тот, каким должен быть, поэтому похоже, что отсутствие hw2p1_main.c требует правила для создания исходного файла C.

Это также может быть неправильное написание имени файла.

0 голосов
/ 10 мая 2010

Если вы убедились

1) Все отсутствующие файлы находятся в том же каталоге, что и make-файл, или иным образом, согласно указанному пути

2) все командные строки содержат символы табуляции, а не пробелы (самый простой способ проверить это - нажать клавишу со стрелкой влево на первом символе, и она должна вернуться в исходное положение (0-й символ позиции строки)

Тогда В большинстве случаев проблема в формате файла Makefile. Если вы печатаете файл в редакторе, имеющем формат строки ПК (CR / LF), вам нужно будет установить его в формате CR.

Таким образом, вы можете набрать Makefile в vi или emacs или любом другом редакторе, который имеет формат файла по умолчанию UNIX, и он будет работать или установить формат файла вашего документа на тип UNIX в вашем редакторе, если он позволяет его установить.

Это должно работать для всех ошибок типа 'ake: фатальная ошибка: не знаю, как сделать цель (OR) <BR/> 'ake: Fatal error: Don't know how to make target (имя последнего файла в строке)

Надеюсь, это поможет.

0 голосов
/ 28 марта 2010

Этот ответ почти никогда не доступен! Итак, в основном я нашел решение. Написанный вами make-файл - это звук. Тем не менее, вы должны создать его в EMACS. Странно верно? Мне нужно было подать заявку, я написал свой make-файл в блокноте и загрузил его на сервер университета, и он никогда не запускался! Я попытался использовать разные варианты кода, но не повезло. Затем в отчаянии я перепечатал все это в EMACS, и это просто сработало. Никаких изменений в коде. Дайте ему шанс!

0 голосов
/ 17 февраля 2010

Просто удар в темноте, но соответствует ли регистр имени файла?Исходя из мира Windows / Apple, некоторые люди удивляются, что имена файлов unix чувствительны к регистру.

Вы можете проверить это, скопировав имя файла точно из вывода об ошибке и попытавшись составить его список, т.е.Это также должно показать вам, есть ли в имени файла некоторые управляющие символы, которые также могут быть вашей проблемой.

0 голосов
/ 17 февраля 2010

Ваш Makefile намного сложнее, чем нужно. Позвольте Make использовать его неявные правила. Он знает, как сделать foo.o из foo.c, и вам не нужно об этом говорить. Весь ваш Makefile может быть уменьшен до:


OBJS = hw2p1_main.o hw2p1_getit.o hw2p1_parseit.o hw2p1_moveit.o hw2p1_showit.o
hw2p1: $(OBJS)
    $(CC) $(CFLAGS) $(CPPFLAGS) $(OBJS) -o $@

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

0 голосов
/ 17 февраля 2010

Для начала попробуйте make-файл, который компилирует только одну вещь:

hw2p1_moveit.o: hw2p1_moveit.c
    gcc -o moveit.o -c hw2p1_moveit.c

Также убедитесь, что во 2-й строке используется символ табуляции, а не пробелы. (Я должен вручную установить это в моем редакторе, потому что пробелы - единственный разумный способ сделать это:)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...