Re[5]: makefiles vs project files
От: jazzer Россия Skype: enerjazzer
Дата: 24.02.15 18:09
Оценка:
Здравствуйте, 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-у и всё. А там делай что душе угодно.

о ужас
jazzer (Skype: enerjazzer) Ночная тема для RSDN
Автор: jazzer
Дата: 26.11.09

You will always get what you always got
  If you always do  what you always did
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.