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

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

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

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

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


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

13 ответов

18 просмотров

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

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, когда появились нормальные таргеты

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

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

Господа, а что сейчас вообще с рынком труда на делфи происходит? Какова ситуация?
Rꙮman Yankꙮvsky
29
А вообще, что может смущать в самой Julia - бы сказал, что нет единого стандартного подхода по многим моментам, поэтому многое выглядит как "хаки" и произвол. Короче говоря, с...
Viktor G.
2
30500 за редактор? )
Владимир
47
а через ESC-код ?
Alexey Kulakov
29
Гайс, вопрос для разносторонее развитых: читаю стрим с юарта, нада выделять с него фреймы с определенной структурой, если ли чо готовое, или долбаться с ринг буффером? нада у...
Vitaly
9
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
14
Добрый день! Скажите пожалуйста, а какие программы вы бы рекомендовали написать для того, чтобы научиться управлять памятью? Можно написать динамический массив, можно связный ...
Филипп
7
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
длина пакета фиксированная, или меняется?
Okhsunrog
7
Карта сайта