Изучите Makefiles=news.ycombinator.com=

Изучите 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

Leave a Reply

Your email address will not be published. Required fields are marked *