目录结构

-----

  |--common

    |---add.h add.cpp

    |---sub.h sub.cpp

  |--src

    |---main.cpp

COMMDIR=common
APPDIR=src

COMMSRC:=$(wildcard $(COMMDIR)/*.cpp)
APPSRC:=$(wildcard $(APPDIR)/*.cpp)

COMMDEP:=$(patsubst %.cpp,%.d,$(COMMSRC))
APPDEP:=$(patsubst %.cpp,%.d,$(APPSRC))

COMMOBJ:=$(patsubst %.cpp,%.o,$(COMMSRC))
APPOBJ:=$(patsubst %.cpp,%.o,$(APPSRC))

CPPFLAGS:=-g -Icommon -MD

all:main

deps: $(COMMDEP) $(APPDEP)

main: $(COMMOBJ) $(APPOBJ)
g++ $^ -o $@ -Icommon/

common:$(COMMOBJ)

app:$(APPOBJ)

clean:
@rm -rf main
@find ./ -name *.d | xargs rm -rf
@find ./ -name *.o | xargs rm -rf

-include $(COMMDEP) $(APPDEP)

注意点:

1. CPPFLAGS的定义, 必须加入-MD, 下面是MD在GNU GCC 中文手册的解释

-MD
和`-M'选项类似,但是把依赖信息输出在文件中,文件名通过把输出文件名末尾的
`.o'替换为 `.d'产生.同时继续指定的编译工作---`-MD'不象`-M'那样阻止正常
的编译任务

2. -include 后面紧跟 dep文件的定义 

-include file
在处理常规输入文件之前,首先处理文件 file,其结果是,文件 file 的内容先得到编
译. 命令行上任何`-D'和`-U'选项永远在`-include file'之前处理, 无论他们在
命令行上的顺序如何.然而`-include'和`-imacros'选项按书写顺序处理.

posted on 2014-03-10 22:14  adidos  阅读(244)  评论(0编辑  收藏  举报