Generic Makefile for C/C++ Program 通用Makefile

# Generic Makefile for C/C++ Program  
#  
# Author: whyglinux (whyglinux AT hotmail DOT com)  
# Date:   2006/03/04  
# Description:  
# The makefile searches in <SRCDIRS> directories for the source files  
# with extensions specified in <SOURCE_EXT>, then compiles the sources  
# and finally produces the <PROGRAM>, the executable file, by linking  
# the objectives.  
# Usage:  
#   $ make           compile and link the program.  
#   $ make objs      compile only (no linking. Rarely used).  
#   $ make clean     clean the objectives and dependencies.  
#   $ make cleanall  clean the objectives, dependencies and executable.  
#   $ make rebuild   rebuild the program. The same as make clean && make all.  
#==============================================================================  
## Customizing Section: adjust the following if necessary.  
##=============================================================================  
# The executable file name.  
# It must be specified.  
# PROGRAM   := a.out    # the executable name  
PROGRAM   := checkipconflict

# The directories in which source files reside.  
# At least one path should be specified.  
# SRCDIRS   := .        # current directory  
SRCDIRS   := .

# The source file types (headers excluded).  
# At least one type should be specified.  
# The valid suffixes are among of .c, .C, .cc, .cpp, .CPP, .c++, .cp, or .cxx.  
# SRCEXTS   := .c      # C program  
# SRCEXTS   := .cpp    # C++ program  
# SRCEXTS   := .c .cpp # C/C++ program  
SRCEXTS   := .cpp

# The flags used by the cpp (man cpp for more).  
# CPPFLAGS  := -Wall -Werror # show all warnings and take them as errors  
CPPFLAGS  := -Wall

INCLUDES :=
INCLUDES += -I../public/lib \
            -I../public/tinyxml/ \
            -I../public/gflags-1.5/libs/include/

LIBS :=
LIBS += -L../public/lib -lhelper \
        -L../public/tinyxml/ -ltinyxml \
        -L../public/gflags-1.5/libs/lib/ -lgflags \
        -lpthread


# The compiling flags used only for C.  
# If it is a C++ program, no need to set these flags.  
# If it is a C and C++ merging program, set these flags for the C parts.  
CFLAGS    :=  
CFLAGS    +=  

# The compiling flags used only for C++.  
# If it is a C program, no need to set these flags.  
# If it is a C and C++ merging program, set these flags for the C++ parts.  
CXXFLAGS  :=  
CXXFLAGS  +=  $(INCLUDES)

# The library and the link options ( C and C++ common).  
LDFLAGS   :=  
LDFLAGS   += $(LIBS) -static

## Implict Section: change the following only when necessary.  
##=============================================================================  
# The C program compiler. Uncomment it to specify yours explicitly.  
#CC      = gcc  
# The C++ program compiler. Uncomment it to specify yours explicitly.  
CXX     = g++  
# Uncomment the 2 lines to compile C programs as C++ ones.  
#CC      = $(CXX)  
#CFLAGS  = $(CXXFLAGS)  
# The command used to delete file.  
RM        = rm -f  

## Stable Section: usually no need to be changed. But you can add more.  
##=============================================================================  
SOURCES = $(foreach d,$(SRCDIRS),$(wildcard $(addprefix $(d)/*,$(SRCEXTS))))  
OBJS    = $(foreach x,$(SRCEXTS),$(patsubst %$(x),%.o,$(filter %$(x),$(SOURCES))))  
DEPS    = $(patsubst %.o,%.d,$(OBJS))  
.PHONY : all objs clean cleanall rebuild  
all : $(PROGRAM)  

# Rules for creating the dependency files (.d).  
#---------------------------------------------------  
%.d : %.c  
    @$(CC) -MM -MD $(CFLAGS) $<  
%.d : %.C  
    @$(CC) -MM -MD $(CXXFLAGS) $<  
%.d : %.cc  
    @$(CC) -MM -MD $(CXXFLAGS) $<  
%.d : %.cpp  
    @$(CC) -MM -MD $(CXXFLAGS) $<  
%.d : %.CPP  
    @$(CC) -MM -MD $(CXXFLAGS) $<  
%.d : %.c++  
    @$(CC) -MM -MD $(CXXFLAGS) $<  
%.d : %.cp  
    @$(CC) -MM -MD $(CXXFLAGS) $<  
%.d : %.cxx  
    @$(CC) -MM -MD $(CXXFLAGS) $<  

# Rules for producing the objects.  
#---------------------------------------------------  
objs : $(OBJS)  
%.o : %.c  
    $(CC) -c $(CPPFLAGS) $(CFLAGS) $<  
%.o : %.C  
    $(CXX) -c $(CPPFLAGS) $(CXXFLAGS) $<  
%.o : %.cc  
    $(CXX) -c $(CPPFLAGS) $(CXXFLAGS) $<  
%.o : %.cpp  
    $(CXX) -c $(CPPFLAGS) $(CXXFLAGS) $<  
%.o : %.CPP  
    $(CXX) -c $(CPPFLAGS) $(CXXFLAGS) $<  
%.o : %.c++  
    $(CXX -c $(CPPFLAGS) $(CXXFLAGS) $<  
%.o : %.cp  
    $(CXX) -c $(CPPFLAGS) $(CXXFLAGS) $<  
%.o : %.cxx  
    $(CXX) -c $(CPPFLAGS) $(CXXFLAGS) $<  

# Rules for producing the executable.  
#----------------------------------------------  
$(PROGRAM) : $(OBJS)  
ifeq ($(strip $(SRCEXTS)), .c)  # C file  
    $(CC) -o $(PROGRAM) $(OBJS) $(LDFLAGS)  
else                            # C++ file  
    $(CXX) -o $(PROGRAM) $(OBJS) $(LDFLAGS)  
endif  

-include $(DEPS)  
rebuild: clean all  
clean :  
    @$(RM) *.o *.d  
cleanall: clean  
    @$(RM) $(PROGRAM) $(PROGRAM)


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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值