help-make
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: Implicitly specifying target directories


From: Paul D. Smith
Subject: Re: Implicitly specifying target directories
Date: Mon, 20 Mar 2006 12:35:49 -0500

%% "EXT-Pennington, Dale K" <address@hidden> writes:

  edk> Currently each subproj builds in its source directory and have make
  edk> files with object lists of

  edk> OBJS = obj1.o obj2.o ,,, objn.o

  edk> That server as dependencies for the final exe, and targets for pattern
  edk> based build rules.

  edk> Not we can modify the OBJS to be 

  edk> OBJDIR = ../../obj/subproj1
  edk> OBJS =  $(OBJDIR)/obj1.o $(OBJDIR)/obj2.o .... $(OBJDIR)/objn.o

Why not just keep the original setting for users:

 > OBJS = obj1.o obj2.o ,,, objn.o

Then add this (in a more global place):

 > OBJDIR = ../../obj/subproj1
 > OBJS :=  $(addprefix $(OBJDIR)/,$(OBJS))

That's the way it's traditionally done.

  edk> But it would be better if we could just tell make that all .o are in
  edk> $(OBJDIR) even if they do not currently exist

There's no way to do that.

  edk> I tried the vpath directory, but that only works if the .o already
  edk> exists. If it does not, they make the .o in the src directory, which is
  edk> not desired.

VPATH is for finding SOURCE files, not TARGET files.  It won't work (as
you've discovered) for the latter.

I have some info on this on my web site below.

  edk> One other alternative I could see is to monkey the implicit rule to
  edk> always build the .o in the OBJDIR directory something like

  edk> %.o : %.c
  edk>  cc -o $(OBJDIR)/$(@F) -c $^

No, this is very bad.  Lying to make will never turn out well in the end.

-- 
-------------------------------------------------------------------------------
 Paul D. Smith <address@hidden>          Find some GNU make tips at:
 http://www.gnu.org                      http://make.paulandlesley.org
 "Please remain calm...I may be mad, but I am a professional." --Mad Scientist




reply via email to

[Prev in Thread] Current Thread [Next in Thread]