Почему неявное правило make не работает? - PullRequest
0 голосов
/ 03 февраля 2019

У меня есть исходный файл asd.c и правило компиляции и компоновки этого файла по какой-то причине не работает.

Вот мой супер простой make-файл:

asd.exe: asd.o

Я получаю следующие ошибки

cc    -c -o asd.o asd.c
process_begin: CreateProcess(NULL, cc -c -o asd.o asd.c, ...) failed.
make (e=2): The system cannot find the file specified.
<builtin>: recipe for target 'asd.o' failed
mingw32-make: *** [asd.o] Error 2

Ответы [ 2 ]

0 голосов
/ 04 февраля 2019

Ваш простой make-файл должен быть достаточным, наиболее вероятным является то, что make(1) не может выполнить правило по умолчанию для компиляции файла .c, компилятор по умолчанию называется cc и изменить его на использование gccвместо этого вы должны изменить Makefile на следующее:

CC=gcc
asd.exe: asd.o

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

Действительно, вы могли бы сделать asd, просто сказав

make asd.exe

вообще без make-файла, поскольку существует неявное правило для генерации исполняемого файла непосредственно из его исходного файла .c.Но также вам нужно указать компилятор, если у вас нет cc, поэтому команда должна быть:

make CC=gcc asd.exe

или, если вы собираетесь , всегда используйте gcc как ваш любимый компилятор, просто создайте переменную окружения CC и назначьте ее gcc в среде входа в систему (я предполагаю, что вы находитесь в Windows --- для расширения .exe - и вы знаете, как включитьв нем новая переменная окружения)

0 голосов
/ 03 февраля 2019

несколько возможностей:

  • в каталоге, содержащем make-файл / Makefile
  • нет файла asd.c, у вас нет cc или он не можетбыть найденным через ПУТЬ.Просто введите вручную * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *, который не может быть найден make -f elsewhere/makefile * В этом случае asd.c не может быть найден

Обратите внимание, что если у вас есть только строка asd.exe: asd.o, которая создаст исполняемый файл с именем asd.o

, вы можете изменить свой makefile какчто:

CC = gcc

asd.exe: asd.c
<tab>$(CC) -o asd.exe asd.c
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...