Makefile的编写方法

#############################################################################
# Makefile
#############################################################################

####### Compiler, tools and options
CXX             = g++
CPPFLAGS        = -pipe -Wall -W -pthread -g -D_REENTRANT
INCPATH         = .
LIBS            =
EXECUTABLE      =
RM                      = rm -rf
SRCS            = $(wildcard *.cc)
OBJS            = $(patsubst %.cc,%.o,$(SRCS))
DEPS            = $(patsubst %.o,%.d,$(OBJS))
CPPFLAGS        += -MMD $(addprefix -I, $(INCPATH))
MISSING_DEPS = $(filter-out $(wildcard $(DEPS)),$(DEPS))
MISSING_DEPS_SRCS = $(wildcard $(patsubst %.d,%.cc,$(MISSING_DEPS)))
    
.PHONY : everything deps objs clean veryclean rebuild
    
everything : $(EXECUTABLE)
    
deps : $(DEPS)
    
objs : $(OBJS)
    
clean :
        @$(RM) $(OBJS)
        @$(RM) $(DEPS)
    
veryclean: clean
        @$(RM) $(EXECUTABLE)
    
rebuild: veryclean everything
    
ifneq ($(MISSING_DEPS),)
$(MISSING_DEPS):
        @$(RM) $(patsubst %.d,%.o,$@)
endif
    
-include $(DEPS)

$(EXECUTABLE) : $(OBJS)
        $(CXX) -o $(EXECUTABLE) $(OBJS) $(addprefix -l,$(LIBS))

说明:
1,CPPFLAGS里面的-MMD是针对gnu的compilers的,跟-MD(其他compilers)的区别是-MMD去掉了depends里面的系统的头文件(使用#include 的头文件)

2,@$(RM) $(OBJS),这里的@是让编译的时候不显示这条命令,gnu make默认是显示命令的

3,-include $(DEPS),前面的-号是为了忽略当后面的文件不存在的errors

4,.PHONY : everything deps objs clean veryclean rebuild,这句是为了让make不检测:后面的项是否存在同名的文件
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值