ma wrote:
I am writing a make file that will be used on several development. in each
development, there are a huge amount of file that needed to be built but
only a small part of them is changing and others are not changing. I put
all of these files into a library. The idea is that when the user run make
file for the first time, it will create all of the source files and then
create library and copy somewhere in the system. On any other call to this
make file (maybe from some other directory that doesn't have *.obj files
related to library in it), it checks if the lib exist, use it and if not
create it.
This may help you:
[EMAIL PROTECTED] tmp]$ cat Makefile
all :
libmy_obj := a.o b.o
lib/libmy.a : $(libmy_obj) | lib
foo_obj := foo.o
bin/foo : $(foo_obj) lib/libmy.a | bin
bin/foo : LDFLAGS += -Llib -lmy
bar_obj := bar.o
bin/bar : $(bar_obj) lib/libmy.a | bin
bin/bar : LDFLAGS += -Llib -lmy
bin/% :
$(CC) -o $@ $($(@F)_obj) $(LDFLAGS)
lib/% :
ar r $@ $($(@F)_obj)
.PHONY : all clean
all : lib/libmy.a bin/foo bin/bar
lib bin :
mkdir -p $@
clean :
rm -rf *.{c,o} lib bin
# create dummy source files
a.c b.c :
touch $@
%.c :
echo "int main() {}" > $@
[EMAIL PROTECTED] tmp]$ make
touch a.c
cc -c -o a.o a.c
touch b.c
cc -c -o b.o b.c
mkdir -p lib
ar r lib/libmy.a
ar: creating lib/libmy.a
echo "int main() {}" > foo.c
cc -c -o foo.o foo.c
mkdir -p bin
cc -o bin/foo foo.o -Llib -lmy
echo "int main() {}" > bar.c
cc -c -o bar.o bar.c
cc -o bin/bar bar.o -Llib -lmy
rm bar.c foo.c
[EMAIL PROTECTED] tmp]$ make bin/foo
make: `bin/foo' is up to date.
[EMAIL PROTECTED] tmp]$ rm lib/libmy.a
[EMAIL PROTECTED] tmp]$ make bin/foo
ar r lib/libmy.a
ar: creating lib/libmy.a
cc -o bin/foo foo.o -Llib -lmy
_______________________________________________
Help-make mailing list
[email protected]
http://lists.gnu.org/mailman/listinfo/help-make