Re: Нужен ли bash
On Tue, Sep 30, 2008 at 03:00:34PM +0300, Dmitry Nezhevenko wrote:
> > > назови платформу где не работает make?
> >
> > Любая, на которой не работает shell.
>
> Это Ваши слова?
>
> Вы все еще продолжаете утверждать, что make (кстати какой make? GNU?)
> не работает на платформах, где нет шелла? Несмотря на то, что я привел
> два примера (реальный и не очень), где make легко применяется без
> наличия шелла.
В отрыве от контекста, конечно, моё утверждение неверно. Да, можно
составить такой мейкфайл, который выполнится без шелла. Однако перед
этим речь шла о переносимых системах сборки, и именно в этом контексте
был упомянут make. А это подразумевает как переносимость самой системы,
так и переносимость сборочных скриптов. Любой более-менее серьёзный
мейкфайл задействует шелл. И никакой пользы от того, что make способен
работать без шелла, Вы не получите.
> Таким образом, make может работать на платформах без шелла. Да, он не
> будет поддерживать все его фичи, но он будет работать. Например, им
> можно будет собирать софт из исходников :)
Соберите мне GNU hello без шелла.
> > > make -- штука достаточно универсальная. Им можно собирать софт из
> > > исходников, LaTeX документы, ну и др. Им же можно и шелл запускать
> > > (явно или неявно).
> >
> > Кто с этим спорит?
>
> Вы :)
Неправда. Где я сказал, что мейком нельзя собирать что-то из исходников
или компилировать документы LaTeX? Я утверждаю только, что эта система
сборки непереносима, т.к. вплотную завязана на шелл.
> > Some implementations do not use system() for all command lines, as
> > required by the portable makefile format; as a performance enhancement,
> > they select lines without shell metacharacters for direct execution by
> > execve(). There is no requirement that system() be used specifically,
> > but merely that the same results be achieved. The metacharacters
> > typically used to bypass the direct execve() execution have been any of:
> > = | ^ ( ) ; & < > * ? [ ] : $ ‘ ’ " \ \n
>
> Спасибо, читал. Это лишь говорит о том, что make для некоторой части
> команд (в которых используется синтаксис шелла) шелл нужен. В то же
> время GNU make умеет в большей части случаев обходиться без шелла. И
> ни кто не запрещает использовать в make только шелл-независимые вещи.
Так ведь это как раз и есть непереносимость. Стандарт говорит: правила
исполняются шеллом. Значит, шелл должен быть. Правда
_некоторые_реализации_ могут исполнить _часть_ команд и без шелла, но
это всего лишь частный случай, особенность реализации. Такой мейкфайл
можно написать, но произвольный мейкфайл, взятый наугад из произвольного
проекта с вероятностью 99,9% таким свойством обладать не будет.
--
Andrey V. Kiselev
ICQ# 26871517
Reply to: