GNU make - Files in various Directories

bridged with qdn.public.devtools
Post Reply
Thomas Reisinger

GNU make - Files in various Directories

Post by Thomas Reisinger » Wed Feb 19, 2003 9:44 am

Dear Newsgroup,

I tried to compile my software project with the tool GNU make. The
situation is as follows: The source and header files are in different
directories. The binary should reside in the <bin> directory and the the
object files should be stored in the <temp> directory.

project_dir
|
+- source
| |
| +- main.cpp
| +- foo.cpp
|
+- include
| |
| +- foo.h
|
+- bin
|
+- temp

The makefile I wrote looks like:

------------------ MAKEFILE -----------------------

PROJ_DIR= project_dir
BIN_DIR= $(PROJ_DIR)/bin
TEMP_DIR= $(PROJ_DIR)/temp
INCLUDE_DIR= $(PROJ_DIR)/include
SOURCE_DIR= $(PROJ_DIR)/source

CC=g++

CXXFLAGS= -g -Wall
LFLAGS= -g -Wall -o $(BIN_DIR)/a.out

OBJS= foo.o main.o

vpath x.cpp $(SOURCE_DIR)
vpath x.h $(INCLUDE_DIR)
vpath x.o $(TEMP_DIR)
vpath x $(BIN_DIR)

%.c : %o
$(CC) $(CXXFLAGS) -o $(TEMP_DIR)/$@ $<

a.out : $(OBJS)
$(CC) $(LFLAGS) -o $(BIN_DIR)/$@ $^

main.o : main.cpp foo.h

foo.o : foo.cpp foo.h

---------------- MAKEFILE END ------------------------

If I run 'make' the object files are produced and stored in the <temp>
directory. But the linking process failed because 'make' doesn't find
the object files. I have to run 'make' again to link the object files
correctly.
Is there any possibility that I have to run 'make' only once?

Thank you very much in advance,
Thomas

--
Thomas Reisinger
t.reisinger@tu-bs.de

Brian Stecher

Re: GNU make - Files in various Directories

Post by Brian Stecher » Wed Feb 19, 2003 3:57 pm

Thomas Reisinger <t.reisinger@tu-bs.de> wrote:
I tried to compile my software project with the tool GNU make. The
situation is as follows: The source and header files are in different
directories. The binary should reside in the <bin> directory and the the
object files should be stored in the <temp> directory.
...
If I run 'make' the object files are produced and stored in the <temp
directory. But the linking process failed because 'make' doesn't find
the object files. I have to run 'make' again to link the object files
correctly.
Is there any possibility that I have to run 'make' only once?
=======================================================================
PROJ_DIR= project_dir
BIN_DIR= $(PROJ_DIR)/bin
TEMP_DIR= $(PROJ_DIR)/temp
INCLUDE_DIR= $(PROJ_DIR)/include
SOURCE_DIR= $(PROJ_DIR)/source

CC=g++

CXXFLAGS= -g -Wall
LFLAGS= -g -Wall

OBJS= $(TEMP_DIR)/foo.o $(TEMP_DIR)/main.o

vpath %.cpp $(SOURCE_DIR)
vpath %.h $(INCLUDE_DIR)

$(TEMP_DIR)/%.o : %.cpp
$(CC) -c $(CXXFLAGS) -o $@ $<

$(BIN_DIR)/a.out : $(OBJS)
$(CC) $(LFLAGS) -o $@ $^

$(TEMP_DIR)/main.o : main.cpp foo.h

$(TEMP_DIR)/foo.o : foo.cpp foo.h

--
Brian Stecher (bstecher@qnx.com) QNX Software Systems, Ltd.
phone: +1 (613) 591-0931 (voice) 175 Terence Matthews Cr.
+1 (613) 591-3579 (fax) Kanata, Ontario, Canada K2M 1W8

Bill Caroselli

Re: GNU make - Files in various Directories

Post by Bill Caroselli » Wed Feb 19, 2003 5:36 pm

Thomas Reisinger <t.reisinger@tu-bs.de> wrote:
Dear Newsgroup,

I tried to compile my software project with the tool GNU make. The
situation is as follows: The source and header files are in different
directories. The binary should reside in the <bin> directory and the the
object files should be stored in the <temp> directory.

%.c : %o
Shouldn't this be:
%.c : %.o
^ this is missing
If I run 'make' the object files are produced and stored in the <temp
directory. But the linking process failed because 'make' doesn't find
the object files. I have to run 'make' again to link the object files
correctly.
Is there any possibility that I have to run 'make' only once?
But I do like Brian's recommendation better than just making this fix.

--
Bill Caroselli -- Q-TPS Consulting
1-(626) 824-7983
qtps@earthlink.net

Post Reply

Return to “qdn.public.devtools”