[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
problem with updating a static library using make/makefiles
From: |
Thomas Lavergne |
Subject: |
problem with updating a static library using make/makefiles |
Date: |
Fri, 05 Dec 2003 09:37:55 +0100 |
User-agent: |
Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.1) Gecko/20020826 |
Hi all;
I am not an expert with GNU make and makefiles. However, after oneday of
documenting and testing, I still cannot see what is wrong with my case.
I want to build a static library libfray.a (using GNU ar 2.13.90) which
is just an archive of .o files. These 80 .o files are located in
various subdirectories. So, at libfray.a_level I have a Makefile which
basically list my subdirectories, cd to each of them and execute MAKE:
Makefile at libfray.a level :
--------------------------
MAKE = make -$(MAKEFLAGS)
STUFF = libsource libintera libfilter libcommon libmeasure libobj libdistr
SHELL = /bin/sh
default:
for i in $(STUFF); do \
(cd $$i && $(MAKE)); \
(/usr/bin/ranlib libfray.a);\
done
------------------------------------
Then, on each subdirectory (stuff) I have a similar make file:
--------------------------------
LIB = ../libfray.a
INCLUDE = -I.. -I../..
CFLAGS = $(CCFLAGS) $(INCLUDE) $(OPTIMIZE)
ARFLAGS=qv
SHELL = /bin/sh
CFILES = filter.c hit.c howend.c interange.c range.c
OFILES = $(CFILES:.c=.o)
$(LIB): $(OFILES)
ar $(ARFLAGS) $(LIB) $(OFILES)
--------------------------------------------
The rule $(LIB) seems to be the default rule for make (there is a make
depend annd make clean but they are at the bottom of the Makefile)
NOW, when I execute the make command (GNU make 3.79.1 built for Linux
Red Hat 9) from libfray.a level, all my subdirectories are effectively
browsed and I can see all the 80 .o files created. BUT for a reason I
ignore, the ar command is not always called to update the ../libfray
target. The situation is not at all stable : if I 'make clean' to erase
all .o and the libfray.a (i checked it is done) and I rebuild my library
('make' at libfray.a level), it will be another subdirectory which will
not be included.. If I modify the order of STUFF to browse my
subdirectories, another subdirectory will not be included.
I tried a 'make -d' from the libfray.a level. The implicit rules for
compiling .c into .o are working fine but I will list what happens for
the not-included-in-the-static-library directory:
Finished prerequisites of target file `../libfray.a'.
Prerequisite `filter.o' is newer than target `../libfray.a'.
Prerequisite `hit.o' is newer than target `../libfray.a'.
Prerequisite `howend.o' is newer than target `../libfray.a'.
Prerequisite `interange.o' is newer than target `../libfray.a'.
Prerequisite `range.o' is newer than target `../libfray.a'.
No need to remake target `../libfray.a'.
How is it possible that prerequisites newer than target do not imply the
remake of the target??
If it is possible, then please indicate me what are the possible
situations so that I can check everything.
Thanks for any help,
thomas
- problem with updating a static library using make/makefiles,
Thomas Lavergne <=
Re: problem with updating a static library using make/makefiles, Kate Ebneter, 2003/12/08