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

