分享一个通用makefile

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/linux_Allen/article/details/79870129
  • 适合写一些小程序的时候使用,方便快捷
  • c语言 c++ 混编亦可
CROSSCOMPILER :=
EXE := test
MKDIR := mkdir
RM := rm -rf

CC := $(CROSSCOMPILER)gcc
CFLAG := 
CXX := $(CROSSCOMPILER)g++ 
CXXFLAG := 
LIBS := -lpthread

DIR_OBJS := objs
DIR_EXES := exes
DIR_DEPS := deps

DIRS := $(DIR_OBJS) $(DIR_EXES) $(DIR_DEPS)
EXE := $(addprefix $(DIR_EXES)/, $(EXE))

C_SRCS := $(wildcard *.c)
CXX_SRCS := $(wildcard *.cpp)

OBJS := $(C_SRCS:.c=.o) $(CXX_SRCS:.cpp=.o) 
OBJS := $(addprefix $(DIR_OBJS)/, $(OBJS))

DEPS := $(C_SRCS:.c=.dep) $(CXX_SRCS:.cpp=.dep) 
DEPS := $(addprefix $(DIR_DEPS)/, $(DEPS))

.PHONY : rebuild clean all
all : $(DIR_OBJS) $(DIR_EXES) $(EXE)

ifeq ("$(MAKECMDGOALS)", "all")
include $(DEPS)
endif

ifeq ("$(MAKECMDGOALS)", "")
include $(DEPS)
endif

$(EXE) : $(OBJS)
  ifdef C_SRCS
   ifdef CXX_SRCS
    $(CXX) -o $@ $(OBJS) $(LIBS)
   else
    $(CC) -o $@ $(OBJS) $(LIBS)
   endif
  else
   ifdef CXX_SRCS
        $(CXX) -o $@ $(OBJS) $(LIBS)
   endif
  endif

$(DIRS) :
    $(MKDIR) $@

$(DIR_OBJS)/%.o : %.c
    $(CC) -o $@ -c $(filter $(C_SRCS), $^)

$(DIR_OBJS)/%.o : %.cpp 
    $(CXX) $(CXXFLAG) -o $@ -c  $(filter $(CXX_SRCS), $^)

ifeq ("$(wildcard $(DIR_DEPS))", "")
$(DIR_DEPS)/%.dep : $(DIR_DEPS) $(C_SRCS) $(CXX_SRCS)
else
$(DIR_DEPS)/%.dep :  $(C_SRCS) $(CXX_SRCS)
endif
    @echo "Creating $@ ..."
    @set -e; \
    $(CC) -MM -E $(filter $(C_SRCS) $(CXX_SRCS), $^) | sed 's,\(.*\)\.o[ :]*,objs/\1.o $@ : ,g' > $@

rebuild : clean all

clean :
    $(RM) $(DIRS)

猜你喜欢

转载自blog.csdn.net/linux_Allen/article/details/79870129