Hi,

I'm trying to understand the behavior of the following example:

%.a: LIBNAME = $(shell echo $(notdir $(basename $@)) | sed s/lib// | \
        tr '[a-z]' '[A-Z]' | tr '/' '_')
%.a: SOURCES = $($(LIBNAME)_SOURCES)
%.a: OBJECTS = $(addprefix $(STORE)/, $(addsuffix .o, $(SOURCES)))
%.a: DEPLIBS = $($(LIBNAME)_DEPLIBS)
%.a: DEFINES += $($(shell echo $(1) | tr '[a-z]' '[A-Z]' | tr '/' '_')_DEFINES)
%.a: INCLUDES += $($(shell echo $(1) | tr '[a-z]' '[A-Z]' | tr '/'
'_')_INCLUDES)
%.a: dirs $(OBJECTS)
        @echo Packing static library $@ $(OBJECTS) ...
        @$(AR) $(ARPARAMS) $@ $(OBJECTS)

The result is:
============

$(OBJECTS) seems to be empty inside line %.a: dirs $(OBJECTS), because
nested targets are not invoked, for example this one really should:

$(STORE)/%.c.o: %.c
        @echo Creating object file for $< ...
        @$(CCOMP) $(CPARAMS) $(DEFINES) $(INCLUDES) -c $< -o $@

However:
=========

$(OBJECTS) is correct inside command, since ar is looking for object
foo.c.o that should be compiled as dependency:

Packing static library bin/libfoo.a ...
ar: creating bin/libfoo.a
ar: .build/foo/foo.c.o: No such file or directory

The "dirs" target creates subdirectories.

So what's the difference between evaluating variable in dependency
line and in command?

Thanks,
- D.

_______________________________________________
Help-make mailing list
[email protected]
http://lists.gnu.org/mailman/listinfo/help-make

Reply via email to