help-make
[Top][All Lists]
Advanced

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

Re: flat OBJDIR


From: Noel Yap
Subject: Re: flat OBJDIR
Date: Tue, 24 Aug 2004 15:03:22 -0400
User-agent: Mozilla Thunderbird 0.5 (Windows/20040212)

IME, it's much easier to duplicate the directory structure of src than it is to have the obj dir flat. So, if you went ahead with what you plan, you'd put all the work in to get a flat directory, then put more work in ripping out the added complexity. IMHO, it'd be much better to duplicate the directory structure and write a custom script that will do the comparisons.

MTC,
Noel

Alexander Farber wrote:

Hi Ken,

yes, I was going to replicate the directory structure of my sources, but later. Currently I want the destination of my objects to match the one of the original scripted build system, since it is rather large (a 60 MB big log file) and
I have to compare and verify the produced files...

Do you have an error in your "testcase"? It fails for me:

bolinux72:afarber {529} gmake -f Makefile2
gmake: *** No rule to make target `objdir/a.obj', needed by `all'.  Stop.

bolinux72:afarber {530} cat Makefile2 OBJDIR = objdir
OBJSUBDIRS = $(addprefix $(OBJDIR)/,$(dir $(SRCS)))
SRCS = a.cpp \
       src1/b.cpp
OBJS = $(addprefix $(OBJDIR)/,$(SRCS:.cpp=.obj))

all: $(OBJS)

$(OBJDIR) $(OBJSUBDIRS):
        mkdir -p $(@)

$(OBJDIR)/%.obj: %.cpp | $(OBJDIR) $(OBJSUBDIRS)
        g++ -o $@ -c $<




On Mon, Aug 23, 2004 at 12:18:18PM -0400, Ken Smith wrote:

On Mon, Aug 23, 2004 at 04:38:52PM +0000, Alexander Farber wrote:

OBJS = $(addprefix $(OBJDIR)/, $(notdir $(SRCS:.cpp=.obj)))

Instead of trying to build all the objects into a single directory,
could you replicate the directory structure of your sources in your
object directory?  For example, your object directory could look like

objdir/a.obj
objdir/src1/b.cpp

You would define OBJS like this.

OBJS = $(addprefix $(OBJDIR)/, $(SRCS:.cpp=.obj))

I assume that the object directory is dynamically created or, at least
that you don't have the same directory structure there that you have in
your source directory.  You can overcome this as follows.  The following
is a modified version of your test makefile which implements this
suggestion.

OBJDIR = objdir
OBJSUBDIRS = $(addprefix $(OBJDIR)/,$(dir $(SRCS)))
SRCS = a.cpp \
      src1/b.cpp
OBJS = $(addprefix $(OBJDIR)/,$(SRCS:.cpp=.obj))

all: $(OBJS)

$(OBJDIR) $(OBJSUBDIRS):
        mkdir -p $(@)

$(OBJDIR)/%.obj: %.cpp | $(OBJDIR) $(OBJSUBDIRS)
        g++ -o $@ -c $<

--
Ken Smith




_______________________________________________
Help-make mailing list
address@hidden
http://lists.gnu.org/mailman/listinfo/help-make





reply via email to

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