Oczywiście nie obce jest mi tworzenie podstawowych Makefile'ów, dla projektów składających się z wielu plików źródłowych, ale co w przypadku gdy projekt rozrasta się znacznie. Chciałbym umieścić poszczególne części projektu w podkatalogach, czy wręcz podkatalogach zagnieżdzonych. O ile w przypadku kilkudziesięciu plików i jednego poziomu podkatalogów nie ma problemu. Tworzę reguły dla podkatalogów kompilujące bez linkowania do plik.o zaś ten plik jest użyty w katalogu głównym programu, do zbudowania (zlinkowania) ostatecznego programu. Coś jak:
Kod: Zaznacz cały
bash-4.1$ cat Makefile
CC = gcc
FLAGS =
SUBDIRS = sub1
all: program
program: code.c code1.out code2.out sub1/sub1.out
${CC} ${FLAGS} $^ -o program
code%.out: code%.c
${CC} ${FLAGS} -c code$*.c -o code$*.out
sub1/sub1.out: subdirs
subdirs:
make -C sub1
clean:
rm -f -R *.out
clean_all:
if [ -f program ]; then rm program; fi
rm -f -R *.out
bash-4.1$ cat sub1/Makefile
CC=gcc
CFLAGS=
all: sub1.out sub2.out
sub%.out: sub%.c
${CC} ${CFLAGS} -c sub$*.c -o sub$*.out
clean:
rm -r -f *.out
bash-4.1$
Kod: Zaznacz cały
bash-4.1$ make
gcc -c code1.c -o code1.out
gcc -c code2.c -o code2.out
make -C sub1
make[1]: Entering directory `/test/sub1'
gcc -c sub1.c -o sub1.out
gcc -c sub2.c -o sub2.out
make[1]: Leaving directory `/test/sub1'
gcc code.c code1.out code2.out sub1/sub1.out -o program
Ps. Mam nadzieję, że za mocno nie zamotałem, ale przyznaję, trochę się w tym gubię