Comments 20
из-за использования mtime для определения свежести целей
А что с mtime случилось?
Декларативность — супер, но писать что то большое и сложное — по факту можно, но после тебя эти авгиевы конюшни никто не разгребет.
Проблема в отсутвии областей видимости, глобальности всего и вся.
И этот таб — это анахронизм позапрошлого века.
и то что строки после таб это не bash команды, вот это пипец плохо.
Утилита, которой уже 44 года, довольно неплохо сохранилась.
Да, сейчас её можно ругать, но это все равно что ругать ассемблер за его низкоуровневость.
Большое и сложное можно написать на более других языках (qmake, cmake). И получится тот же Makefile.
И этот таб — это анахронизм позапрошлого века.
Ага… как отступы в питоне или фортране…
Чтоб не «началось»: «Это сарказм».
Эта рекомендация актуальна для сборки проектов, время сборки которых изменяется в минутах или часах (а не в миллисекнудах, как в статье).
Собственно, в реальной жизни обычно так и приходится запускать make -j4
(по количеству ядер), обычно об этом пишут в инструкциях по сборке.
Там ещё много всякого есть, так то ))
Интересно, откуда взялось слово .PHONY
?
И опять пример с make где в очередной раз собирается проект на C.
Это скучно и тривиально.
У меня в мейк оборачивает Terraform, не слишком удобно но избавляет от необходимости помнить длинные наборы параметров или просто искать их в истории шелла.
Разработчик с которым я сотрудничаю оборачивает kubectl. Не идеально, конечно но его устраивает.
Вот описание такой системы и возможных альтернатив было бы интересно почитать.
Или манипуляции с переменными среды.
Или еще чего не совсем стандартного.
Пример использования make
в непрограммистской жизни:
BMPS := $(wildcard *.bmp)
PNGS := $(patsubst %.bmp,%.png,$(BMPS))
.PHONY: all
all: $(PNGS)
%.png: %.bmp
convert $< $@
touch -r $< $@
rm $<
Немного более сложная версия этого Makefile конвертирует и складывает в папочку скриншоты Дальнобойщиков 2 (глупая игра при каждом запуске раз нумерует файлы с 1, затирая старые снимки).
P.S. Главный и абсолютно неизлечимый недостаток make — невозможность обрабатывать файлы с пробелами. Он мог бы быть гораздо полезнее в обиходе.
all: hello\ world.c
g++ -g -o hello hello\ world.c
У нас все банально на работе.
make
используется для сборки debian-пакетов сайтов и для простого выполнения каких-то обслуживающих скриптов на продакшене:
make update_rt_indexes
И всё, и админу не нужно помнить, судо там или не судо и какие параметры. Параметры по умолчанию подставляются. Туда же — make help
.
А, ну еще на машине разработки ряд задач сделан не через баш-макросы, а командами make, например make setup_env
или make sync_db_replica
.
P.S. Но я видел и make-file, обслуживающий зоопарк докера.
Кунг-фу стиля Linux: великая сила make