Kdokoliv: No jo, promiň, to slinkování je proto, že ten horní make nevidí ten libtest.o a nemůže se přesvědčit, jestli není nový. Pro tento účel tedy ten horní Makefile bude vypadat:
CC = /bin/cc
CFLAGS = -Wall -g -pipe
all: test
test: test.o lib/libtest.o
$(CC) $(CFLAGS) -o test test.o lib/libtest.o
test.o: test.c
$(CC) $(CFLAGS) -c -o test.o test.c
lib/libtest.o: lib/libtest.c
(cd lib; $(MAKE))
Pak už by to mělo fungovat tak, jak chceš. Jinak také je obvyklé dávat všechny obj soubory potřebné pro závěrečné slinkování do adresáře obj (apod.).
No a s tím počtem, v tom horním Makefile není pravidlo pro překlad, jen odeslání do podadresáře -- vlastní pravidlo bude vždy jen jednou, v Makefile v tom podadresáři. Kolik bude těch horních pseudopravidel, to už záleží na projektu, jak je udělán, jaké tam jsou závislosti atd. |