linux简单的通用Makefile模板

来源:互联网 发布:跆拳道道服多少钱淘宝 编辑:程序博客网 时间:2024/05/16 19:39

供写小程序的时候使用

可以随意的修改文件名称

随意的增删文件、目录

随意的调整文件的目录层次

不编译某个.c文件时将其改个后缀名即可

不能有重复的文件名称

 

# wugangnan@hcn2000.comCROSS_COMPILE= /opt/poky/1.7.3/sysroots/x86_64-pokysdk-linux/usr/bin/arm-linux-gnueabihf-CC= $(CROSS_COMPILE)arm-linux-androideabi-gccAS      = asLD      = ld#CC      = gccCPP     = $(CC) -EAR      = arNM      = nm# 程序的默认名称TARGET = xf6000test# 命令行中使用p=X或P=X修改默认程序名称ifeq ("$(origin p)", "command line")TARGET = $(p)endififeq ("$(origin P)", "command line")TARGET = $(P)endifDIRS = $(shell find . -type d)# 找出所有的.c .h .a .so文件及目录CFILES_DIR = $(shell find . -type f -name "*.c")CFILES = $(notdir $(CFILES_DIR))HFILES_DIR = $(shell find . -type f -name "*.h")HFILES = $(notdir $(HFILES_DIR))HDIRS= $(sort $(dir $(HFILES_DIR)))AFILES_DIR = $(shell find . -type f -name "lib*.a")AFILES= $(notdir $(AFILES_DIR))ADIRS= $(sort $(dir $(AFILES_DIR)))SOFILES_DIR = $(shell find . -type f -name "lib*.so")SOFILES= $(notdir $(SOFILES_DIR))SODIRS= $(sort $(dir $(SOFILES_DIR)))# 包含所有含有.h文件的目录INCLUDES += $(HDIRS:%=-I%)$(warning INCLUDES : [ $(INCLUDES) ])CFLAGS += $(INCLUDES)# 编译标志CFLAGS += -Wall -WerrorCFLAGS += -g -MD -O2 -static# 含有.a .so文件的目录LDFLAGS += $(ADIRS:%=-L%)LDFLAGS += $(SODIRS:%=-L%)# 引用库文件LDFLAGS += $(AFILES:lib%.a=-l%)LDFLAGS += $(SOFILES:lib%.so=-l%)LDFLAGS += -lpthread$(warning LDFLAGS : [ $(LDFLAGS) ])# 包含所有的目录VPATH = $(DIRS)# 所有的.c文件SOURCES = $(CFILES)$(warning SOURCES : [ $(SOURCES) ])# 目标及依赖OBJS= $(SOURCES:%.c=obj/%.o)DEPS = $(SOURCES:%.c=obj/%.d)###########################################################.PHONY : all clean cleanallall : $(TARGET)$(TARGET) : $(OBJS)@echo@echo "Linking..."@echo$(CC) $(LDFLAGS) $^ -o $@@echo@echo "enjoy < $(TARGET) > Good Luck."@echoobj/%.o : %.c@mkdir -p obj$(CC) $(CFLAGS) -c $< -o $@clean :rm -rf $(OBJS) $(DEPS) objcleanall :rm -rf $(OBJS) $(DEPS) obj $(TARGET)# 包含生成的依赖关系sinclude $(DEPS)


原创粉丝点击