Здравствуйте, vsb, Вы писали:
vsb>Здравствуйте, jazzer, Вы писали:
vsb>>>Makefile это гибрид. Декларативно описываются цели сборки и их зависимости. В то же время сами инструкции для сборки описываются императивно.
J>>Эта императивная часть просто для удобства, она не критична, она даже не часть мейк-языка, она может писаться на абсолютно любом языке — на питоне, на перле... Если бы они требовали укладываться в одну строчку и чтоб все команды были внешними — было бы лучше? Это просто способ объявить скрипт прямо внутри, не вынося его наружу в отдельный файл.
vsb>Если бы было требование укладываться в одну строчку, это был бы не make.
ты как будто не прочитал остальное выше? императивная часть — не часть языка вообще. Это просто "сунь в начало строки TAB и дальше пиши, что хочешь от слова вообще — я это все скормлю той тулзе, которую ты указал". Понятно, что по умолчанию это будет какой-нть bash, но может быть что угодно, хоть Хаскель (я так думаю

)
vsb>>>На мой взгляд основная проблема Makefile-ов в их плохой расширяемости и реюзабельности.
J>>Расширяемости? А с ней-то что не так? Куда уж расширябельнее? правила в свободной форме, команды зови какие хочешь, они вообще не на языке мейка написаны, а на языке шелла, который ты используешь, можешь использовать хоть перл.
vsb>Плохо то, что нельзя какие то свои конструкции делать.
какие такие свои конструкции в зависимостях? Можешь пример привести?
vsb>Сложно делать обобщённые конструкции.
по паттернам, по переменным можно делать/генерить зависимости. В сложных случаях можно и скрипт какой-нть дергнуть, а его результат заинклудить просто (так выкусывание зависимостей по хедерам работает, только в роли скрипта компилятор выступает)
vsb>Проводить рефакторинг, так сказать. Сложно делать свои механизмы зависимостей. Например чтобы отслеживать зависимости .c файлов от .h файлов, нужно научить компилятор выплёвывать эти зависимости в специальном формате для make-а и потом их include-ить.
Так это не отслеживание зависимостей, а их генерация. С отслеживанием никаких проблем нет, а с генерацией — да, нужна отдельная тулза, которая умеет дополнительные зависимости выкусывать, в зависимости от типа файла — свои тулзы (я так понимаю, в мавене это называется плагинами).
vsb>Это работает, но правильней было бы, чтобы make использовал какой-нибудь dependency checker в виде плагина. Вот как мне make-файл написать для Java-проекта, чтобы при изменении файла все зависящие от него файлы менялись? Скорее всего никак. Только писать скрипт-обёртку вместо javac, который будет зависимости выплёвывать аналогично gcc -M.
Я не пишу на джаве, но, наверное, да, нечто вроде — gcc же понимает джаву, вроде как. Но в любом случае это генератор, сторонняя вещь.
Или ты имеешь в виду, что нет стандартного специального способа позвать генератор? Ну так, во-первых, он для каждого типа файла свой (а то и для отдельного файла, как в моем случае), а во-вторых, генератор тоже зовется совершенно естественным образом — через обычную зависимость самого мейкфайла от сгенеренных кусочков. Так что ничего особенного не нужно, чтоб вот именно генерацию обрабатывать.
vsb>Вот-вот. Людям не нужна супер-гибкость. Людям надо, чтобы инструмент делал свою задачу. И им проще засунуть код в src/main/java, чем изучать The Gnu Make Manual какой-нибудь на десяток глав. Бывает, что проект вырастает, интегрируется и приходит нужна в гибкости, которой мавену не хватает. Сопровождающий проект ругается, пишет свои плагины, пишет гневные посты, но он один, а остальных много.
супергибкий инструмент хорош тем, что тебе не нужно изучать десяток негибких, но заточенных.
J>>Любой инструмент, которым ты овладел, становится нормальным инструментом, а не второстепенным — ты знаешь его сильные и слабые стороны и можешь применить с пользой для себя там, где он подходит лучше всего.
vsb>В современном мире знания устаревают быстро и люди очень критичны к выбору технологий, в которые стоит вкладывать своё время.
Полностью согласен, поэтому я изучил мейк основательно один раз 20 лет назад и с тех пор горя не знаю
vsb>Вот мне надо было сделать простой сайт, но всё же каких то ништяков хотелось вроде автоматичекой генерации css из less, минификации и прочего. Я потратил полчаса, накопипастил с разных мест скрипт для grunt-а и задачу решил. При этом я этот самый grunt особо не узнал. Но оно мне и не надо, я задачу решил. А grunt этот уже умирает, его каким-то gulp-ом заменяют нынешние девелоперы. И толку мне его изучать было?
Я даже не знаю, что такое grunt

Не говоря уже о gulp

Но если ты решил задачу за полчаса копипасты на абсолютно незнакомом языке — респект и уважуха.
J>>ЗЫ Ну, то есть, я предполагаю, что на мавене тоже можно что-то серьезное кастомизированное написать, но не думаю, что в таком случае писанине будет меньше, чем с мейком. А, скорее всего, сильно больше — потому что мейк и уже очень минималистичен синтаксически.
vsb>Что-то совсем серьёзное обычно просто пишется на Java в виде плагина к maven-у и всё. А там делай что душе угодно.
о ужас