On Sat, 3 May 2003, franciszek holop wrote:
> 1. my first problem:
> how can i get the `pwd` where the makefile was started?
> GNU: ROOTDIR=$(shell pwd)
> BSD: ROOTDIR=$(.CURDIR)
>
> is there a universal solution in the Makefile? or any other
> ideas (./configure preferably not)
if it helps, all actions in the makefile in both BSD and GNU always start
in the Makefile's pwd. here's an example with the target "example":
$ cat Makefile
example:
echo `pwd`
cd /tmp && echo `pwd`
$ make example # BSD make
echo `pwd`
/tmp/example
cd /tmp && echo `pwd`
/tmp
$ gmake example # explicitely GNU make
echo `pwd`
/tmp/example
cd /tmp && echo `pwd`
/tmp
if you tie lines together (ie using &&, || operators and \ to continue a
line to the next) you can keep your pwd. this meets 99% of peoples' needs
when used properly in my experience.
> 2. the GNUmakefile specifies a "%" macro which
>
> can match any part of the target name; this part is called the
> "stem". The rest of the pattern must match exactly. For
> example, the target `foo.o' matches the pattern `%.o', with
> `foo' as the stem. The targets `foo.c' and `foo.out' do not
> match that pattern.
>
> the makefile i am trying to make more BSD like uses this feature
> as a kind parameter passing mechanims in the rule names:
>
> Makefile:
> ---------------------------------------
> rule4%.dict:
> @echo "this is rule4$(*F).dict"
>
> this: rule4this.dict
>
> that: rule4that.dict
> ---------------------------------------
>
> amaaq> gmake this
> this is rule4this.dict
> amaaq> gmake that
> this is rule4that.dict
>
> it is useful, because the make process runs a lot of scripts, and
> passes the $(*F) as parameter for those scripts.
> so the rules are written just once and make use of this parameter.
>
> how can accomplish the same w/bsd make?
i think you should look at .IMPSRC (the implied source), the .TARGET
(target of the action), and the .SUFFIXES rules:
.SUFFIXES: .c .o
.c.o:
cc ${CFLAGS} -c -o ${.TARGET} ${.IMPSRC}
for BSD make documentation, look in /usr/share/doc/psd/12.make. for great
examples of uses, look in /usr/share/mk at the system makefiles.
hope this helps. it may be possible to do what you want using BSD make
builtins.
i have never seen a port so complicated as to require these kinds of
actions.
___________________________
jose nazario, ph.d. jose@monkey.org
http://www.monkey.org/~jose/