When I try to do secondary expansion, it seems to work. Adding a simple
string to the target name:
$(MOD1.OBJECTS) : [EMAIL PROTECTED]
gives a make -p output of:
OUTPUT/MOD1/mod1file2.o: OUTPUT/MOD1/mod1file2.o-fubar
Which is OK.
When I try to mangle the prerequisite a bit more (just a test) it doesn't
seem to work:
$(MOD1.OBJECTS) : $(MOD1.SOURCEDIR)/$$(notdir $$@)
gives a make -p output of:
OUTPUT/MOD1/mod1file1.o: MOD1/$(notdir) MOD1/$($@)
Which is not what I expected.
The example from the manual (slightly modified):
$(MOD1.OBJECTS) : $$(patsubst %.o,%.c,$$@)
Results in a make -p of:
OUTPUT/MOD1/mod1file1.o: $(patsubst) $(%.o,%.c,OUTPUT/MOD1/mod1file1.o)
The next line:
$(MOD1.OBJECTS) : $(MOD1.OBJECTS) : $$(@:.o=.c)
Even results in a:
*** target pattern contains no `%'. Stop.
Am I missing something? Do the spaces mess things up? But the manual uses
patsubst though...
--
Joost Leeuwesteijn
##########################################
#
# Test makefile
#
##########################################
MOD1.SOURCEDIR:=./MOD1
MOD1.OUTPUTDIR:=./OUTPUT/MOD1
# force immediate expansion of += lines
MOD1.OBJECTS :=
MOD1.OBJECTS += $(MOD1.OUTPUTDIR)/mod1file1.o
MOD1.OBJECTS += $(MOD1.OUTPUTDIR)/mod1file2.o
# ----------------------------------------
$(MOD1.OUTPUTDIR)/module1.a : $(MOD1.OBJECTS)
.SECONDEXPANSION :
$(MOD1.OBJECTS) : $(MOD1.SOURCEDIR)/$$(notdir $$@)
#$(MOD1.OBJECTS) : [EMAIL PROTECTED]
#$(MOD1.OBJECTS) : $$(@:.o=.c)
#$(MOD1.OBJECTS) : $$(patsubst %.o,%.c,$$@)
# ----------------------------------------
%.a :
@echo "Linking $@"
@echo " $?"
@touch $@
%.o : %.c
@echo "Compiling $@"
@touch $@
_______________________________________________
Help-make mailing list
[email protected]
http://lists.gnu.org/mailman/listinfo/help-make