On Mon, 2005-01-31 at 15:39, Rahul Jain wrote: > I want to tweak target lists and locations for the build of two > different libraries in my project. I don't want to replicate all of the > contents of the makefile for each one. Pattern-specific variables seemed > like a good way to achieve this, but it seems that target names can't > have any dependency on pattern-specific variables. What is the best way > to achieve this goal? > > I want to have something like (of course, with far more rules, but I > should be able to generalize from something that works for this): > > OBJDIR = bin > > TARGET1 = $(OBJDIR)/foo/target.tx > TARGET2 = $(OBJDIR)/bar/target.tx > > TARGET1: PROJ = foo > TARGET2: PROJ = bar > > SRCDIR = ../src/$(PROJ) > SRCS: $(wildcard $(SRCDIR)/*.x) > OBJS: $($(subst $(SRCDIR),$(OBJDIR),$(SRCS)):%.x=%.o) > > all: $(TARGET1) $(TARGET2) > > %.tx: $(OBJS) > commands ...
Well, that wont work because you have a few errors in your Makefile. For example, when you do TARGET1: PROJ = foo you really mean $(TARGET1) : PROJ = foo. The other problem is that you are setting PROJ as a variable local to $(TARGET1) but using it later in the rule for $(SRCS) (which I think is actually a definition of a variable not a rule, did you mean = instead of :). Because $(SRCS): $(wildcard $(SRCDIR)/*.x) is going to be handled at Makefile parse time (and not when the rules for $(TARGET1) and prereqs is run, PROJ is undefined and hence SRCDIR is ../src/. Perhaps you can just rearrange your Makefile so that all the emphasis is on which PROJ you are building, rather than the target. John. -- John Graham-Cumming Home: http://www.jgc.org/ Work: http://www.electric-cloud.com/ POPFile: http://getpopfile.org/ _______________________________________________ Help-make mailing list [email protected] http://lists.gnu.org/mailman/listinfo/help-make
