commands within ``make''
Guy Harris
guy at rlgvax.UUCP
Sun Feb 17 06:29:40 AEST 1985
> Is there a good reason why an option cannot be added
> to ``make'' so that it will directly execute subcommands
> such as the compiler, instead of invoking a subshell?
Stu Feldman thought it was a good idea - that's why he put it into "make"
when he wrote it. The following code comes from "dosys.c", V7/4.2BSD version;
the System III and System V versions do the same thing:
if(metas(comstring))
status = doshell(comstring,nohalt);
else status = doexec(comstring);
"doshell" does an "sh -c", and "doexec" chops the command string up itself
and does a "fork" and "exec".
> The only reason I can think of is to allow shell syntax
> such as pipes.
"metas()" returns 1 if the string contains any shell meta-characters (like
'|' for pipes), and 0 otherwise.
> Some tests indicate that a vfork() and execvp() go about twice as
> fast as a system().
Not surprising, considering you don't have to fire up "/bin/sh". However,
neither version of "make" uses "vfork" - it uses "fork" instead, probably
because the child fiddles with various things before execing.
Guy Harris
{seismo,ihnp4,allegra}!rlgvax!guy
More information about the Comp.unix
mailing list