Я изучаю, как работает make, и столкнулся с небольшой странностью
Предположим, у меня есть папка только с «helloworld.c» и «Makefile».
Makefile содержит
helloworld: helloworld.o
gcc -o helloworld helloworld.o
Вывод make в консоли bash:
cc -c -o helloworld.o helloworld.c
gcc -o helloworld helloworld.o
Правило «helloworld» зависит от файла «helloworld.o», которого нет, поэтому make создает его (первая строка в выводе).
Но почему?
Я бы ожидал, что он потерпит неудачу из-за отсутствия правила «helloworld.o:», которое сообщает ему, как компилировать указанный файл. Почему он запускает первую команду по собственной воле?
Спасибо
make helloworld
. - person user657267   schedule 03.05.2016make -r
(илиmake --no-builtin-rules
), чтобы отключить неявные правила, что теоретически должно вызвать ошибку, которую вы ожидаете. Если документация make сбивает вас с толку, рассмотрите несколько альтернатив make (BSD make, cmake, scons, jam и т. д.). Документация IME make огромна и все еще умудряется быть довольно бедной. - person Dummy00001   schedule 04.05.2016make -Rr
, чтобы избавиться от неявных правил (вам нужно только одно изr
илиR
, но я никак не могу вспомнить, какое). Я не любитель узоров. (--warn
тоже жутко полезен; жаль, что нет соответствующего--error
, очень бы хотелось.) - person bobbogo   schedule 19.05.2016