170 похожих чатов

Привет, чатик! У меня вопрос по gnu make. Основная фича make, насколько

я понимаю - это перекомпиляция при изменении зависимостей. Зависимости таргета могут быть перечислены после двоеточия.

Обычно под изменением зависимости подразумевают изменение содержимого файла на который ссылается таргет. make проверяет это только при помощи времени модификации файла.

Иными словами, если зависимость моложе таргета, то таргет будет выполнен.


Вопрос: а есть ли другие случаи, когда тригерится таргет?

13 ответов

6 просмотров

поменялся хидер, на который этот сишник ссылается

Andrey-Enshin Автор вопроса
Alex
поменялся хидер, на который этот сишник ссылается

А почему это именно другой случай, не описанный мною выше, когда меняется файл и соответственно его атрибут "время изменения"?

В @probuildsystems

Andrey Enshin
А почему это именно другой случай, не описанный мн...

#include "file.h" int main(){ printf("Hello"); return 0; } А меняешь file.h. Насколько я помню, make умеет вытаскивать список зависимостей (инклюдов) из gcc/clang (возможно спец опциями компиляторов) и отслеживать их изменение. Не факт, что это будет сделано явно (не помню)

Andrey-Enshin Автор вопроса
Alex
#include "file.h" int main(){ printf("Hello"); ...

Интересно, понял. Ты наверное пытаешься сказать об автоматической генерации правил и, возможно, о неявных таргетах. Есть такое, да. Например, gcc может cc -M main.c сгенерировать такое правило: main.o : main.c file.h https://www.gnu.org/software/make/manual/html_node/Automatic-Prerequisites.html А за счёт неявных правил тебе не нужно писать правило для main.c https://www.gnu.org/software/make/manual/html_node/Implicit-Rules.html Однако в итоге make будет руководствоваться временем модификации файла (хедер или .c). Мне же интересно вот что: существуют ли другие поводы, кроме более свежего времени модификации зависимости, для запуска правила?

Andrey Enshin
Интересно, понял. Ты наверное пытаешься сказать об...

https://www.gnu.org/software/make/manual/html_node/How-Make-Works.html - тут есть какие-то доп правила для Yacc & Bison. Да и в принципе описано то, как оно работает

Andrey-Enshin Автор вопроса
Alex
https://www.gnu.org/software/make/manual/html_node...

Да, это документация по make. Неплохо кстати написано. Рекомендую. Если вдруг кто-то знает/сталкивался с запуском правила не потому что время файла новее, будет интересно узнать.

Andrey-Enshin Автор вопроса

Хорошо, спасибо. А почему?

Andrey Enshin
Хорошо, спасибо. А почему?

потому что портянку на make легко заменяет cmake в 10 строк и он намного понятее чем ручное жонглирование зависимостями а если надо что-то специфическое - генераторы, etc все достаточно просто делается

Alex
потому что портянку на make легко заменяет cmake в...

Портянку на мейке для локальной сборки обычно заменяет цмак в 2-3 строки, и только если надо что-то более серьезное там размер растет.

Andrey-Enshin Автор вопроса
Alex
потому что портянку на make легко заменяет cmake в...

Понял, спасибо. Интересно. Пока выбрасываю make, процесс не очень быстрый, всё же позволю себе немного поискать случаи запуска правила, когда время модификации зависимости не поменялось. Интересно всё-таки :)

Andrey Enshin
Понял, спасибо. Интересно. Пока выбрасываю make, ...

ну это вам решать. но будете смотреть на cmake - то все начиная с версии 3, когда появились нормальные таргеты

Похожие вопросы

Обсуждают сегодня

Коллеги, здравствуйте! А можно узнать ваше мнение относительно Wolfram Mathematica vs Julia? Просто у меня стоит выбор между тем, чтобы продолжить преподавать Wolfram Mathemat...
Илья Гаража
10
Обновленный chat тестили уже господа? Готовимся на заводы ? Простой проект на ларавель собирает за 1 ответ..
Jacov Borisov
14
есть тут кто-то , кто только начал изучать си? если проходите курс на степике или как-то сами изучаете, пишите, может, скооперируемся?..
Eule
23
кому не сложно распишите пожалуйста для какой цели тут вот эти скобки и в них пихается указатель?
Михаил Helper
15
я не магистр хаскеля, но разве не может лейзи тип конвертнуться в не-лейзи запросив вычисление содержимого прям при инициализации?
deadgnom32 λ madao
100
словил ушиб всей бабки Uncaught Error: Class "EvolutionCMS\Main\MainServiceProvider" not found in и ни composer update, ни composer dump-autoload не помогает что ещё сделать...
Oleg Nosov
7
Такс, блин, таки кто-то знает, каким образом работают макросы stdin/stdout/stderr? Я влез в stdio.h, там определения нет, отладил через асмокод - вызывается функция со странны...
The Bird of Hermes
18
Или мне дублировать структуру с информацией о следующем потоке в адресное пространство текущего потока?
One
9
Комрады, посоветуйте, куда копать? Стал прикручивать кастомизацию тем. В OnShow главной главной формы пытаюсь загрузить из файла настроек и применить тему (на скрине, как долж...
Ed Doc
13
Серьезно? Вот прям так на глагне на первом экране?
Sasha Beep
8
Карта сайта