История изменений
Исправление dimgel, (текущая версия) :
Вот допустим есть у нас hello.c
, hello.o
и hello
. Если правило .o: .c
отработало, но при этом hello.o
не перекомпилялся потому что hello.c
не изменился, то и hello
из hello.o
линковать не надо. Все правила отработали без ошибок, но и без выполнения команд. И на каждом шаге сравнивались mtime. А если mtime у .o: .c
– закешированный ответ «готово», то бинарник будет пересобираться всегда.
И например вот это описание алгоритма работы make тоже как-то и с вашими ответами, и с описанным мною странным поведением слабо согласуется.
Исправление dimgel, :
Вот допустим есть у нас hello.c
, hello.o
и hello
. Если правило .o: .c
отработало, но при этом hello.o
не перекомпилялся потому что hello.c
не изменился, то и hello
из hello.o
линковать не надо. Все правила отработали без ошибок, но и без выполнения команд. И на каждом шаге сравнивались mtime.
И например вот это описание алгоритма работы make тоже как-то и с вашими ответами, и с описанным мною странным поведением слабо согласуется.
Исходная версия dimgel, :
Вот допустим есть у нас hello.c
, hello.o
и hello
. Если правило .o: .c
отработало, но при этом hello.o
не перекомпилялся потому что hello.c
не изменился, то и hello
из hello.o
линковать не надо. Все правила отработали без ошибок, но и без выполнения команд.
И например вот это описание алгоритма работы make тоже как-то и с вашими ответами, и с описанным мною странным поведением слабо согласуется.