一个简单的通用Makefile模板
2011-09-25 21:46
393 查看
供写小程序的时候使用
可以随意的修改文件名称
随意的增删文件、目录
随意的调整文件的目录层次
不编译某个.c文件时将其改个后缀名即可
不能有重复的文件名称
可以随意的修改文件名称
随意的增删文件、目录
随意的调整文件的目录层次
不编译某个.c文件时将其改个后缀名即可
不能有重复的文件名称
# kernel.digger@gmail.com AS = as LD = ld CC = gcc CPP = $(CC) -E AR = ar NM = nm # 程序的默认名称 TARGET = prog # 命令行中使用p=X或P=X修改默认程序名称 ifeq ("$(origin p)", "command line") TARGET = $(p) endif ifeq ("$(origin P)", "command line") TARGET = $(P) endif DIRS = $(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 -Werror CFLAGS += -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 cleanall all : $(TARGET) $(TARGET) : $(OBJS) @echo @echo "Linking..." @echo $(CC) $(LDFLAGS) $^ -o $@ @echo @echo "enjoy < $(TARGET) > Good Luck." @echo obj/%.o : %.c @mkdir -p obj $(CC) $(CFLAGS) -c $< -o $@ clean : rm -rf $(OBJS) $(DEPS) obj cleanall : rm -rf $(OBJS) $(DEPS) obj $(TARGET) # 包含生成的依赖关系 sinclude $(DEPS)
相关文章推荐
- linux简单的通用Makefile模板
- 一个简单的通用Makefile实现
- 一个简单通用的应用程序makefile
- 自己调试通过的一个通用makefile模板
- 编写一个简单通用的makefile
- 一个简单的通用Makefile实现
- 一个简单的Makefile模板
- 简单的通用Makefile模板
- [置顶] 自己写一个简单通用的Makefile
- 一个通用的Makefile模板
- 一个通用Makefile模板
- 一步一步写一个简单通用的makefile(一)
- linux下面简单通用的Makefile模板
- 一步一步写一个简单通用的makefile(四)--写一个通用的makefile编译android可执行文件
- 一步一步写一个简单通用的makefile(二)
- 一步一步写一个简单通用的makefile(三)
- 编写一个简单通用的makefile
- 一个简单的通用Makefile实现
- 一个通用的Makefile模板-转
- 一个简单的通用Makefile实现