LINUX.ORG.RU

Чем Makefile лучше POSIX-shell скрипта?

 


1

5

Сабж.

Зачем изобрели ещё один формат скриптов под названием Makefile? Чем не лучше было использовать /bin/sh?

Вот думаю, стоит ли переписывать один скриптик для сборки кое-чего на формат Makefile, вместо /bin/sh, и какие профиты это даст?

★★★★★

make - декларативный язык, sh - императивный. Со всеми вытекающими последствиями

annulen ★★★★★
()
Ответ на: комментарий от annulen

Со всеми вытекающими последствиями

Например, что приходится писать на sh и вызывать из make.

anonymous
()

какие профиты это даст

Автоматическую сборку зависимостей и вызов пересборки основного таргета при изменении хотя бы одной из зависимостей.

стоит ли переписывать один скриптик

Если у тебя с вышеперечисленным проблем нет - не трогай то, что уже работает.

E ★★★
()

Зачем изобрели саморезы? Чем не лучше было использовать гвозди?

akk ★★★★★
()

Makefile во много раз меньше эквивалентного скрипта.

anonymous
()

стоит ли переписывать один скриптик для сборки кое-чего на формат Makefile

если большой, то стоит, ибо за мейкфайлом приглядывать сильно легче, к тому же переписывание либо сократит время пересборки(за счёт зависимостей и пересборки только нужных файлов), либо размер кода(за счёт того, что ты не будешь реальизовывать для этого функционала велосипеды)

чем ... лучше

понятностью и краткостью кода. то, для чего в sh придётся делать велосипеды из sed'ов, в мейке реализовано лаконичным и читаемым синтаксисом

f1u77y ★★★★
()

Инкрементальные сборки и управление зависимостями.

В sh этого не сделать не написав дополнительную библиотеку, и не оговорив интерфейсы. Учитывая, что декларативная запись тут оказывается сильно удобней, а скорость выполнения проверки состояния зависимостей является критичной, умные люди, решили таки запилить отдельный тул, со своим dsl.

Потом, когда мэйка стало не хватать придумали ninja и иже с ним.

Напрмер, make на моём свежесобранном проекте тратит почти 10 секунд, что бы убедиться что делать ничего не надо, нинзя управляется за 200мс. При использовании tdd это например сильно заметно.

Конечно, можно указать конкретные цели сборки, но, если разрабатываемый компонент имеет много зависимостей, то это не сильно поможет. Ещё, можно организовать зависимости в виде дерева, но, это привнесёт лишние бинари и замедлит сборку с нуля.

pon4ik ★★★★★
()

Зачем изобрели экскаватор, когда можно обойтись палкой-копалкой? ;)

Спуфи, ты помешался на баше. Когда в руке молоток — всё кажется гвоздём. Это про тебя.

beastie ★★★★★
()

Вот было бы у тебя высшее образование в области компутер сайенс, ты бы такими глупыми вопросами не задавался :P

Harald ★★★★★
()
Ответ на: комментарий от f1u77y

От себя добавлю, что если переписывать, то лучше уж для CMake, ибо синтаксис Make довольно упоротый (форматирование табами, например).

cherry-pick
()

Вот думаю, стоит ли переписывать один скриптик для сборки кое-чего на формат Makefile, вместо /bin/sh, и какие профиты это даст?

Смотря как соптимизируешь скрипт.

sT331h0rs3 ★★★★★
()

Спуф, открой для себя cmake!

Eddy_Em ☆☆☆☆☆
()

Да вынь ты уже голову из всей этой срани и освой какой-нибудь нормальный язык программирования.
И систему сборки - по потребности.

thesis ★★★★★
()

Или пили свою with blackjack and whores.

kachsheev ★★★
()

Пора переходить на qbs.

Makefile - устарел.

Chaser_Andrey ★★★★★
()

открой для себя cmake

Пора переходить на qbs

понаизобретают этих ваших «стандартов», а ты только и успевай переходить, подстраиваться под новые кококо-стандарты, вместо того, чтобы просто заниматься интересным и полезным делом.

Spoofing ★★★★★
() автор топика
Последнее исправление: Spoofing (всего исправлений: 1)
Ответ на: комментарий от pon4ik

Инкрементальные сборки и управление зависимостями.

+ бонусом идёт автоматическое правильное распараллеливание выполнения целей.

Krieger_Od ★★
()
Ответ на: комментарий от Spoofing

Ну так и занимайся тогда, к чему на лоре глупые вопросы то задавать :)

Делай сборку на shell скриптах, а лучше, на асме её закодь.

Посмотрим насколько у тебя портабельное выйдет решение, и какую часть времени ты потратишь на сборку и её отладку ;)

pon4ik ★★★★★
()
Ответ на: комментарий от cherry-pick

если сравнивать синтаксис, то cmake по упоротости ещё никому не удавалось переплюнуть(чего стоит только endif с условием!), но при этом согласен, что его править много приятнее

f1u77y ★★★★
()
Ответ на: комментарий от Spoofing

заниматься интересным и полезным делом

Описывать весь процесс сборки на шелле. Да, вы, батенька, извращенец.

anonymous
()
Ответ на: комментарий от f1u77y

чего стоит только endif с условием!

4.2! В endif уже давно необязательно условие писать. Но лучше вписать — тогда ведь лучше понятно, какой endif какой if закрывает. Скобок-то нет, чтобы парные подсвечивать...

Зато если 100500 зависимостей, то cmake явно лучше make. Конечно, любители гну могут autotools использовать, но уж очень они тормозные. Cmake намного шустрей все проверки отрабатывает. А с автомейком зачастую бывает так, что проверка идет минуты 2, а сборка 30 секунд...

Если же в проекте немного файлов и практически никаких вариаций зависимостей, то, ясен пень, проще сгенерировать по шаблону makefile самописным баш-скриптом, да подправить что нужно.

Eddy_Em ☆☆☆☆☆
()
Ответ на: комментарий от Spoofing

Кстати, make -j N позволяет собирать в N параллельных потоков, дожидаясь сборки зависимостей... Может sh такое?

I-Love-Microsoft ★★★★★
()

Я прозрел! Ты просто совсем не шаришь!

Напиши для начала полный эквивалент

out: in1 in2 in3 in4
        cat $+ > out

t184256 ★★★★★
()

Донской Тупняк Gold.

anonymous
()
Ответ на: комментарий от Eddy_Em

В endif уже давно необязательно условие писать.

знаю, но ты же сам написал, для чего их лучше писать:

Но лучше вписать — тогда ведь лучше понятно, какой endif какой if закрывает.

это самый идиотский способ закрывать if, который я когда-либо видел

f1u77y ★★★★
()

Shell-скрипты универсальны, мейкфайлы были сделаны для одной конкретной задачи. Так-то это намного проще, но мейкфайл читать приятнее. Сборку на shell можно написать десятью разными способами, кода будет много, разбирать его будет трудно.

CYB3R ★★★★★
()
Ответ на: комментарий от CYB3R

Собственно говоря, всё сводится к тому, что после 2-3-4-х опытов ты начнёшь писать на shell «фреймворк», что выльется в то же безобразие.

ABW ★★★★★
()
Ответ на: комментарий от ABW

на shell «фреймворк», что выльется в то же безобразие

Кто сказал autotools.

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.