On Mon, Sep 29, 2008 at 05:14:14PM +0400, Andrey Kiselev wrote: > On Sun, Sep 28, 2008 at 05:51:30PM +0300, Dmitry Nezhevenko wrote: > > > make вызывает shell для исполнения записанных в нём команд. > > > > В общем случае -- нет > > Как раз в общем случае --- да, а Вы привели случай частный.
У каждого свое понятие общего и частного случаев. make -- штука достаточно универсальная. Им можно собирать софт из исходников, LaTeX документы, ну и др. Им же можно и шелл запускать (явно или неявно). Вот тебе другой пример (который как раз выполнят то, для чего был придуман make): --- LDFLAGS=-lm CFLAGS=-Wall all: test test: test.o $(CC) $(LDFLAGS) -o $@ $< test.o: test.c $(CC) $(CFLAGS) -o $@ -c $< .PHONEY: all --- Ну и простой test.c int main() { return 0; } make тут запускает компилятор и линкер. И шелл ему тут нафиг не нужен. > > Да, согласен, в этом случае make разберётся и выполнит команду напрямую, > однако если записать так: > > all: > sleep 60; sleep 60 Cлив защитан (c). Можно было и явно тут /bin/sh вызвать. Впрочем ладна.. Я тоже буду передергивать =) > > то ему придётся вызвать шелл (и он таки его вызовет). А это значит, что > синтаксис мейкфайла непосредственно связан с синтаксисом POSIX-шелла. По > факту даже не каждое встроенное правило сможет обойтись без шелла. > import os os.system('sleep 30; sleep 30') Бидону придется вызывать шелл (и он его таки вызывает). А это значит, что синтаксис бидона непосредственно связан с синтаксисом POSIX-шелла. /* Дальше бред поскипан */ -- WBR, Dmitry
signature.asc
Description: Digital signature