make: *** Нет правила для создания цели `gcc ', необходимой для` all'.Стоп - PullRequest
4 голосов
/ 19 декабря 2011

Я прошу, например, pgm, чтобы создать файл make.

http://mrbook.org/tutorials/make/

Моя папка eg_make_creation содержит следующие файлы,

desktop:~/eg_make_creation$ ls
factorial.c  functions.h  hello  hello.c  main.c  Makefile

Makefile

all:gcc -c main.c hello.c factorial.c -o hello

ошибка:

desktop:~/eg_make_creation$ make all
make: *** No rule to make target `gcc', needed by `all'.  Stop.

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

Ответы [ 4 ]

14 голосов
/ 19 декабря 2011

Синтаксис make-файлов очень строг:

target:dependencies
        build_rules
# ^ this space here _needs_ to be a tab.

То, что вы написали, делает all зависимым от gcc, -c, ... которые не являются допустимыми целями.

Что вам нужно, это что-то вроде:

all: hello

hello: factorial.c  functions.h hello.c  main.c 
         gcc -o hello factorial.c hello.c  main.c 

(Если вы хотите скомпилировать и связать за один шаг, не используйте переключатель -c).

2 голосов
/ 14 августа 2013

Мэт прибил его.

В моем конкретном случае я использую vi, и по умолчанию включена опцияtabtab !!

Чтобы узнать, относится ли эта проблема к вам, откройте vi иdo:

:set list

Если вы не видите ^ I, где должна быть вкладка, то, скорее всего, у вас включен et.

Чтобы отключить его просто:

:set expandtab!

Может быть, это поможет кому-то еще.

0 голосов
/ 27 марта 2014

After all: все целевое, показывает зависимость, все, что написано после этого, должно представлять этот каталог, как в вашем коде gcc (как файл отсутствует), как мудрый -c тоже all:gcc -c main.c hello.c factorial.c -o hello правильное значение all:main.c hello.c factorial.c -o hello Пожалуйста, прочитайте больше об этом GNU MAKE

0 голосов
/ 02 мая 2013

Другая причина в том, что у вас неправильное имя в списке исходных файлов. (nameWrong.o вместо nameRight.o) Это была моя проблема.

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