多個目錄Makefile編寫模板

參考了一個多目錄下的Makefile的編寫,但是有幾處錯誤沒法測試,這裏作了改正,寫了一模板,用了三個文件file1.h,file2.h,file3.h,test.c作測試。

1.   目錄結構maketest下的子目錄

bin:存放生成的文件

include:存放頭文件(這裏放入file1.h,file2.h,file3.h)

libs:存放引用的庫

src:存放源文件(這裏放入file1.c,file2.c,file3.c,test.c)

其中的Makefile文件如下

TOPDIR :=$(shell if [ "$$PWD" != "" ];then echo $$PWD;else pwd;fi)

export TOPDIR

LIBPATH:= $(TOPDIR)/libs

export LIBPATH

SUBDIRS =src

CPLUS_INCLUDE_PATH = $CPLUS_INCLUDE_PATH:$(TOPDIR)/include
export CPLUS_INCLUDE_PATH 

.PHONY:$(SUBDIRS)

all:depend$(SUBDIRS)

dependdep:

@for dir in $(SUBDIRS);do $(MAKE) -C $$dir.depend;done

$(SUBDIRS):

$(MAKE) -C $@ all

clean:

   @for dir in $(SUBDIRS);do $(MAKE) -C $$dirclean;done

2.      src目錄下的Makefile如下

SUBDIRS =ebook

.PHONY:$(SUBDIRS) clean

all:.depend$(SUBDIRS)

$(SUBDIRS):

$(MAKE) -C $@ all

.dependdep:

@for dir in $(SUBDIRS);do $(MAKE) -C $$dir.depend;done

clean:

   @for dir in $(SUBDIRS);do $(MAKE) -C $$dirclean;done

3.      ebook目錄下的Makefile文件如下

INCLUDEDIRS+= -I/usr/include -I$(TOPDIR)/include

 

CC             = gcc

CFLAGS     = -O4 $(INCLUDEDIRS)

ELF         = ../../bin/ebook   #相對於可執行文件

 

AOBJS    = $(patsubst %.s, %.o, $(wildcard *.s))

COBJS    = $(patsubst %.c, %.o, $(wildcard *.c))

CPPOBJS =$(patsubst %.cpp, %.o, $(wildcard *.cpp))

OBJS    = $(AOBJS) $(COBJS) $(CPPOBJS)

 

all:.depend $(OBJS)

$(CC) $(CFLAGS) $(OBJS) -L $(LIBPATH) \

-L /usr/lib -ljpeg -lfreetype -lttf -lpthread         \

-L /usr/X11R6/lib \

-o $(ELF)

chmod 755 $(ELF)

 

.depend:Makefile $(AOBJS:.o=.S) $(COBJS:.o=.c) $(CPPOBJS:.o=.cpp)

$(CC) -M $(CFLAGS) $(AOBJS:.o=.S)$(COBJS:.o=.c) $(CPPOBJS:.o=.cpp) > $@

 

sinclude.depend

 

clean:

rm -f *.o .depend *.out *.bak

rm-f $(ELF)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章