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

Reply via email to