Makefile通用模板

下面是Makefile文件的一个通用模板,包括了Release和Debug目标生成、自动依赖性计算

--------------------------------------------------------------------------------------

 

#Debug目标和Release目标
TARGET = libTinyXML.a
TARGET_R = libTinyXML.ra

#gcc编译和链接选项
CC = g++
ARRC = ar -ru
CFLAGS = -Wall -ggdb #-fPIC
LFLAGS = -Wl,-rpath,../bin #-shared
CFLAGS_R = -Wall -O3
LFLAGS_R = -Wl,-rpath,../bin

#源文件、目标文件、依赖文件
SRC_FILES = $(wildcard *.cpp)
OBJ_FILES = $(SRC_FILES:.cpp=.o)
OBJ_FILES_R = $(SRC_FILES:.cpp=.ro)
DEP_FILES = $(SRC_FILES:.cpp=.d)
DEP_FILES_R = $(SRC_FILES:.cpp=.rd)

#头文件目录和库文件
INCLUDE =
LIBRARY =

#Debug目标生成规则
$(TARGET) : $(DEP_FILES) $(OBJ_FILES)
 #$(CC) $(CFLAGS) $(LFLAGS) -o $@ $(OBJ_FILES) $(LIBRARY)
 $(ARRC) -o $@ $(OBJ_FILES) $(LIBRARY)
%.o : %.cpp
 $(CC) $(CFLAGS) -c -o $@ $< $(INCLUDE)

#Release目标生成规则
$(TARGET_R) : $(DEP_FILES_R) $(OBJ_FILES_R)
 #$(CC) $(CFLAGS_R) $(LFLAGS_R) -o $@ $(OBJ_FILES_R) $(LIBRARY)
 $(ARRC) -o $@ $(OBJ_FILES_R) $(LIBRARY)
%.ro : %.cpp
 $(CC) $(CFLAGS_R) -c -o $@ $< $(INCLUDE)
   

#依赖性计算
%.d : %.cpp
 $(CC) -MM $< > $@
%.rd : %.cpp
 $(CC) -MM $< > $@
 sed -i 's/.o/.ro/' $@

all : $(TARGET) $(TARGET_R)

#伪目标,清除
.PHONY :
clean :
 -rm -rf $(OBJ_FILES) $(TARGET)
 -rm -rf $(OBJ_FILES_R) $(TARGET_R)
 -rm -rf $(DEP_FILES) $(DEP_FILES_R)

#伪目录,打印依赖性,如果不存在,会生成
.PHONY :
depend : $(DEP_FILES) $(DEP_FILES_R)
 @echo update depend files:$(DEP_FILES)
 @echo update depend files:$(DEP_FILES_R)

 

-include $(DEP_FILES)

-include $($(DEP_FILES_R)

 

下面是遍历子目录,并调用子目录的Makefile

----------------------------------------------------------------------------------------------------

 

SUBDIR = d_a d_b d_c

all : all-recursive

all-recursive clean-recursive depend-recursive install-recursive :
    @target=`echo $@ | sed s/-recursive//`; /
    for subdir in '$(SUBDIR)'; do /
    echo "===> Making $$target in $$subdir..."; /
    (cd $$subdir && $(MAKE) $$target) /
    done;

 

.PHONY :
clean : clean-recursive

 

.PHONY :
depend : depend-recursive

 

.PHONY :
install : install-recursive

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值