In the "Target-specific Variable Values" section of the gmake manual 
(http://www.gnu.org/manual/make-3.79.1/html_node/make_70.html#SEC69)
it is noted that " when you define a target-specific variable, that
variable value is also in effect for all prerequisites of this target".
However, this does not work for built-in rules, as is demonstrated by
the following example:

# Example Makefile
try: OBJECT = try.o
try:    $(OBJECT)
        cc -o $@ $<

When used with make version 3.79.1 on a FreeBSD 4.5-STABLE (i386) system
this results in:

gmake
cc -o try 
cc: No input files specified
gmake: *** [try] Error 1

If the target-specific OBJECTS variable line is changed to
"OBJECT = try.o" then GNU make works as expected:

gmake
cc    -c -o try.o try.c
cc -o try try.o

It seems that the presence of a target-specific variable in the
dependency list of the target prevents the built-in rule from being used.
I tried providing the typical pattern rule:

%.o:    %.c
        cc -c $<

This works as expected when $(OBJECT) is a simple variable. But, here
too, when $(OBJECT) is a target-specific variable this prevents the
pattern rule from being used.

Here is an "interesting" work-around:

# Work-around Makefile
try:    SOURCE = try.c
try:    OBJECT = $(SOURCE:%.c=%.o)
try:    obj
        $(CC) -o $@ $(OBJECT)
obj:
        $(CC) -c $(SOURCE)

This results in the expected:

gmake
cc -c try.c
cc -o try try.o


-- 

Bradford Castalia
Senior Systems Analyst
Planetary Image Research Laboratory

_______________________________________________
Bug-make mailing list
[EMAIL PROTECTED]
http://mail.gnu.org/mailman/listinfo/bug-make

Reply via email to