#makefile
#makefile
Вопрос:
word.o: word.c word.h
gcc -c word.c
line.h: word.h
touch line.h
Выше приведено содержимое makefile. когда я выполняю make.
Я вижу, что файл word.o
создан. Но файл line.h
не выполняется.
В чем может быть причина этого? Насколько я знаю, make не
выполните те цели, которые не имеют никаких зависимостей.
Но здесь список зависимостей не пуст, тем не менее, он не был выполнен
Ответ №1:
Конечно, make создает цели, которые не имеют зависимостей. Если у цели нет зависимостей, то она считается устаревшей, если она не существует.
Проблема в том, что make не создает каждую отдельную цель в файле makefile: это было бы плохо, потому что многие люди включают clean
цели, test
цели и другие цели, которые они хотят запускать только иногда и не каждый раз.
Вы можете прочитать введение в руководстве GNU make, в частности в этом разделе, чтобы понять, что происходит.
Комментарии:
1.
The other rules are processed because their targets appear as prerequisites of the goal
— Эта строка, вероятно, объясняет это. Итак, я понимаю, что существуют определенные цели, которые являются целями , и по умолчанию первая цель является единственной, которая установлена в качестве цели, и никакой другой (пропуская те, которые начинаются с a .)2. Важная информация — это самое первое предложение: по умолчанию make начинается с первой цели . В вашем makefile первой целью является
word.o
, так что цель (и ее предварительные условия) — это все, что создано по умолчанию.3. Если
line.h
не «собран», то это означает, что он новее, чемword.h
файл, поэтому make не нужно ничего делать, чтобы обновить его.4. Я действительно не понимаю, почему вы хотите коснуться
line.h
, если он старшеword.h
; это кажется очень странной ситуацией. Но, возможно, у вас есть странное требование 🙂5. Я взял этот пример откуда-то, просто чтобы понять, как работает makefile. строка. h не только там. Он будет создан, когда после
touch line.h
этого ничего не произойдет. Я думаю, что вопрос о построении и времени появится в строке when. h был существующим файлом. Итак, я понимаю, что концепция цели входит в картину