まずディレクトリdirのなかにディレクトリdir1とdir2が格納されていたとする。
・dirの中にはmakefileしかない。
・dir1にはsrc1,makefileが含まれている。
・dir2にはsrc2,makefileが含まれている。
この時、いちいちmakefileの中でほかのディレクトリのファイルを操作するのはしんどい。
なのでmakefileを分割しようと考えた。
解決策として、dir,dir1,dir2すべてのディレクトリの中にmakefileを用意するというものがある。
例えば、この時それぞれのファイルには次のように記述する。
# dir/makefile
OBJ=src1.o src2.o
.PHONY: target dir1_obj dir2_obj
target : dir1_obj dir2_obj
gcc -o $@ $(OBJ)dir1_obj :
cd dir1;
make alldir2_obj :
cd dir2;
make all
# dir/dir1/makefile
DIR=./../
.PHONY: all
all : src1.c
gcc -c $?
mv src1.o $(DIR)
# dir/dir2/makefile
DIR=./../
.PHONY: all
all : src2.c
gcc -c $?
mv src2.o $(DIR)
このようにするとmakefileを分割することができ、複雑さを多少解消できるかもしれない。