分享一个通用makefile

xiaoxiao2021-02-28  26

适合写一些小程序的时候使用,方便快捷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)
转载请注明原文地址: https://www.6miu.com/read-2632590.html

最新回复(0)