近來,經常看到有人詢問makefile的寫法,這裡根據本人經驗給出一個應用系統的完整例子,便於各位參考。 應用系統的目錄結構如下: 代碼: ~/bin 可執行程序目錄 ~/etc 配置文件目錄 ~/inc 頭文件目錄 ~/lib 函數庫文件目錄 ~/log 日志文件目錄 ~/src 源程序文件目錄 ~/src/lib 函數庫源程序目錄 ~/src/lib/LIB_1 函數庫libLIB_1源程序目錄 ~/src/APP_A 子系統APP_A源程序目錄 ~/src/APP_A/mod_a 子系統APP_A模塊mod_a源程序目錄 ~/.profile ~/makefile ~/makefile文件內容如下: 代碼: all: @MakeSubDir() { for DIR in `lsgrep 'lib';lsgrep -v 'lib'`; do if [ -d ${DIR} ]; then cd ${DIR}; MakeSubDir; if [ -f makefile -o -f Makefile ]; then echo ""; pwd; make all; fi; cd ..; fi; done; }; MakeSubDir tar: @tar -cf `date +%Y%m%d-%H%M%S`.tar .profile `lsgrep -v '.tar'` ~/src/lib/LIB_1/makefile文件內容如下: 代碼: ALL: INFO all BASEDIR = $(HOME) INC = $(BASEDIR)/inc LIB = $(BASEDIR)/lib PRDNAME = $(LIB)/libLIB_1 PRODUCT = $(PRDNAME).a $(PRDNAME).so OBJS = LIB_1_f1.o LIB_1_f2.o AR = ar CC = cc all: $(PRODUCT) $(PRDNAME).a: $(OBJS) @echo " Making $@ ..." @$(AR) -r $@ $(OBJS) $(PRDNAME).so: $(OBJS) @echo " Making $@ ..." @$(CC) -G -o $@ $(OBJS) .c.o: *.h $(INC)/*.h @echo " Compiling $< ..." @$(CC) -c -I$(INC) $