Изучите Makefiles ( makefiletutorial.com )

buserror 1 минуту назад | следующий [–] Очень хорошая статья, кажется, упоминает все современные детали, которые помогают сделать makefile намного, НАМНОГО проще, чем в прошлые десятилетия…
Интересными моментами являются, например, флаг -MMD для gcc, который выводит файл .d, в который вы можете включить ${wildcard *.d}, и вы получите бесплатные, актуальные зависимости для ваших заголовков и т. д.
Это и «vpath», чтобы указать, где найти исходные файлы для % правил, и, по сути, вся тяжелая работа сделана, и ваш Makefile размером в 1/2 страницы останется прежним «навсегда» и будет работать через 20 лет… 
stabbles 1 минуту назад | предыдущая | следующая [–] Еще одна интересная вещь, которая возникла в последнее время, заключается в том, что CMake решил, что Makefiles не подходят для проектов, использующих модули C++20, и ninja — это то, что нужно. [1]
В основном считается слишком сложным, если не невозможным, статически определить зависимости цели. Теперь это делается динамически с помощью инструментов типа `clang-scan-deps` [2]
[1] https://cmake.org/cmake/help/latest/manual/cmake-cxxmodules….
[2] https://llvm.org/devmtg/2019-04/slides/TechTalk-Lorenz-clang… 
stabbles 14 минут назад | предыдущая | следующая [–] Пара создает флаги, которые полезны, но, вероятно, не очень известны:
Синхронизация вывода, которая заставляет `make` печатать stdout/stderr только после завершения цели. В противном случае это обычно чередуется и трудно отследить:
make –output-sync=recurse -j10 В загруженных / многопользовательских системах флаг `-j` для заданий может быть не лучшим. Вместо этого вы также можете ограничить параллелизм на основе средней нагрузки:
make -j10 –load-average=10 Рандомизация порядка, в котором планируются цели. Это полезно для вашей CI, чтобы укрепить ваши Makefiles и посмотреть, не пропустили ли вы зависимости между целями:
сделать –shuffle # или –shuffle=seed/reverse 
holsta 3 минуты назад | родитель | следующий [–] > Пара делает флаги, которые полезны [..]
Но не переносимые. Пожалуйста, не используйте их за пределами ваших собственных нераспространяемых игрушечных проектов. 
signa11 19 минут назад | предыдущая | следующая [–] зачем выделять мезон? бесконечно лучше большинства альтернатив, упомянутых в статье.
matheusmoreira 9 минут назад | предыдущая [–] Makefiles — это здорово, но постарайтесь не увлекаться. Несколько лет назад я пытался создать чистый GNU Make framework, но потом понял, что фактически заново изобретаю autoconf. В тот момент я
наконец понял, для чего были созданы GNU autotools.
Makefiles — это жуткие lisp-подобные тюринговые тарпиты. GNU Make даже имеет возможности метапрограммирования, и он вездесущ. Противостоять желанию метапрограммировать какую-нибудь нечестивую систему внутри makefile может быть сложно.

Рассмотрите возможность подачи заявки на набор в YC на осень 2025 года! Заявки принимаются до 4 августа
Source: news.ycombinator.com