[Top][All Lists]

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

RE: Cant seem to figure how to make header file dependencies

From: Leeuwesteijn,Joost
Subject: RE: Cant seem to figure how to make header file dependencies
Date: Fri, 23 Jun 2006 08:30:26 +0200

 Hi Ankur,

>    I have always been afraid of makefiles

Makefiles are cool :-) The alternative is to type all the compile/link
commands and flags at the command line every time, that's your choice :-)

> I am trying to make a generic makefile, in an effort to 
> understand the makefile itself. 
> I have written a makefile to make libraries.
> [...]
> INC_CFLAGS= -I/usr/include/mysql++ -I$(TOPDIR)/cncpbaseclass 
> -I/usr/include/mysql -I$(TOPDIR)/oammsg
> -I$(TOPDIR)/neoamcomm -I../util_lib -I$(TOPDIR)/util

Makefile looks OK. You could use += to put all the flags on a separate line
to make it more readable. And use := where possible for immediate variable
expansion (see manual).

> #OBJS= $(SRCS:%.cpp=%.o) 
> all: $(OUT_LIB_DIR)/$(OUT_LIB)
>         $(COMPILE) $(CFLAGS) -c $?
>         $(MKLIB) $(OUT_LIB_DIR)/$(OUT_LIB) $(OBJS)
>         $(RM) $(OBJS)

Not sure if I would have done it like this; I guess I would still have added
a rule for the .o files. But the $? makes sure only the modified .o's are
rebuilt so this works.

> This seems to work just fine for source file changes. But I 
> cant seem to figure out how to add header file dependencies 
> to it?  
> How can I achieve this?

You really need to add a rule that says which .o files depend on which .h
files. Make will then only compile the .c's that have a modified .h file.
You can still remove all the .o files after the lib is created, but that
wouldn't make much sense because everything will have to be rebuilt at the
next make invocation; the whole purpose of make is to save time and only
rebuild things that need to be rebuilt; reusing already created files.

I would suggest to take a look at Paul's website:
It might look tricky at first and might require some modification depending
on your build environment. I use the (advanced) mechanism as described on
the webpage and it works fine.

Good luck.

Joost Leeuwesteijn

Important Note:

This e-mail message and any attachments are confidential any may be privileged 
or otherwised protected from disclosure. If you are not the intendent recipient 
you must not use, copy, disclose or take any action based on this e-mail or any 
information and attachment contained in the message. If you have received this 
material in error, please advise the sender immediately by reply e-mail or 
telephone and delete this message and any attachments from your system.

Thank you.

reply via email to

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