c-shells inside makefiles

Seth Teller seth at miro.Berkeley.EDU
Sat Oct 27 13:20:39 AEST 1990


In article <meaningless #'s>, peterk at foetus.syd.sgi.oz.au (Peter Kerney) wrote:
>The problems is not ussimply using shells in Makefiles. The problem is
>using 'csh' (THE C-SHELL) from within a Makefile.
>The example you gave was a Bourne shell.
>The makefile I want to work is one that uses the C-shell. (I like it better.)
>Here is a simple test that i[f] anyone                    [^^^^^^^^^^^^^^^^!]
>can get to work I would love it.
>all:
>	foreach i (1 2)
>		echo $i
>	end
>If you can get this to work, everything else is possible.
>Peter Kerney. Silicon Graphics, Sydney, Australia. (peterk at syd.sgi.oz.au)

well, you certainly have unimpeachable reasons for preferring the c shell.
here's a makefile embedding of c shell code that's sort of cheating, but
it does work:

SHELL=/bin/csh
EXECUTE=/bin/sed -e 's/@/$$/g' | /bin/csh

loop:
	echo "foreach i (1 2)\
	echo @i \
	end" | $(EXECUTE)

the tricky part is dealing with "$"s and newlines.  the code has to 
be all on one line (for make) but separated into different lines
(for csh).  so... the idea is to use '@' (or any other odd character
of your choice) in place of $, then substitute for it, using sed,
after make's parsing.  note that the SHELL macro is necessary, since
without it the command text gets collapsed onto a single line.
the $$ escapes the second $ from make's conversion, as noted in
the man page.

finally, it's cheating because the /bin/csh is invoked explicitly
by make, not implicitly.  i'd be interested in other solutions, too.

have fun.

seth



More information about the Comp.sys.sgi mailing list