Help setting up makefile & program library
Daniel Wu
dwu at nunki.usc.edu
Fri Feb 3 10:47:05 AEST 1989
I'm having quite a bit of trouble setting up a makefile. I guess I'm
just not understanding its operation that well. Anyway here is my tale:
I want to create a program library and have my programs link to it each
time. Let's say the library file name is proglib, and proglib contains
2 files lib1.o lib2.o. The dependencies are as follows:
foobar: foobar.c proglib
proglib: lib1.c lib2.c header.h
lib1.o: lib1.c header.h
lib2.o: lib2.c header.h
The reason why I don't have the line
proglib: lib1.o lib2.o
(Those 2 files are what proglib consists of) is because I would like the
lib1.o, lib2.o files to be deleted after they've been gathered into the
library, to save disk space). Thus, the only time that proglib should
be recompiled occurs when changes have been made to any of it's dependent
files lib1.c,lib2.c and header.h (since lib1.c & lib2.c depend on that).
Now, in Sys V UNIX, I've seen makefiles accomplish everything that I've
specified with the simple line:
library: proglib(lib1.o) proglib(lib2.o)
So the resulting makefile is a short and sweet
foobar: $$@ library
$(CC) $@.c proglib -o $@
library: proglib(lib1.o) proglib(lib2.o)
lib1.o lib2.o: header.h
Indeed, I would be satisfied doing it that way were it not for the fact
that I'm working in BSD flavored SUN UNIX, so after creating a library
via
ar rv proglib lib1.o lib2.o
I have to run
ranlib proglib
One quick and dirty fix I thought of (which doesn't work) is to try
foobar: $$@ dummylibrary
$(CC) $@.c proglib -o $@
dummylibrary: lib1.c lib2.c header.h
sh -c "make library;\
ranlib proglib"
library: proglib(lib1.o) proglib(lib2.o)
lib1.o lib2.o: header.h
(As you can see, I also don't really understand how the shell interacts
with make. I believe that if I had simple left the entry as
dummylibrary: lib1.c lib2.c header.h
make library
ranlib proglib
make complains about "Unexpected End of File" or something.)
Anyway, rather than keep peddling my ignorance, can someone please set me
straight, and show me how to set up the makefile properly? Also, if you
would, please explain to me why my clumsy attempts are unsuccessful.
Daniel
dwu at nunki.usc.edu
More information about the Comp.unix.questions
mailing list