Chinaunix首页 | 论坛 | 博客
  • 博客访问: 69246
  • 博文数量: 43
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 420
  • 用 户 组: 普通用户
  • 注册时间: 2014-06-27 15:04
个人简介

记录,分享

文章分类

全部博文(43)

文章存档

2017年(24)

2015年(1)

2014年(18)

我的朋友

分类: C/C++

2017-03-16 11:11:25

###########以下变量也可以设置在shell的环境变量中,如果无需指定,请将其注释或删除,以免空值覆盖默认值###########

#Make的输出目录
OUTDIR=Mydebug

#最终生成的可执行文件
PROGRAM=$(OUTDIR)/run

#源代码根目录
SRCDIR=src

#包含源代码的所有目录($需要用$转义)
SRCDIRS=$(foreach subdir,$(shell ls -R $(SRCDIR) | grep '.*[:]$$' | sed 's/\(.*\)[:]/\1/g'),$(subdir))

#文件搜索路径
VPATH=

#编译器
CC=gcc

#编译器参数
CFLAGS=-g

#指明包含外部头文件的目录,多个目录以空格分隔,每个目录前面添加-I
INCLUDES=

#连接器
LD=$(CC)

#指明引用外部的库文件
LIBS=

#连接器参数
LDFLAGS=

#生成依赖关系文件的参数
DEPENDFLAG=-MM

CFLAGS:=$(CFLAGS) $(INCLUDES)
LDFLAGS:=$(LDFLAGS) $(LIBS)


###############下面为通用部分,一般无需改动###############

#从所有子目录中得到源代码的列表
SRCS=$(foreach dir,$(SRCDIRS),$(wildcard $(dir)/*.c))

#得到源代码对应的目标文件的列表
OBJS=$(patsubst %.c,$(OUTDIR)/%.o,$(SRCS))

#得到源代码对应的依赖关系文件的列表
#依赖关系文件就是一个目标文件依赖于哪些头文件和源程序,依赖关系式自动生成的,并且用include语句包含在makefile中
DEPENDS=$(patsubst %.c,$(OUTDIR)/%.d,$(SRCS))

#指明默认目标式生成最终可执行文件
#all:$(PROGRAM)
$(PROGRAM):$(OBJS)
$(CC) $(CFLAGS) -o $@ $(filter %.o , $^) $(LDFLAGS); \
@echo 'Succeed to generate $(PROGRAM)' ;

#包含依赖关系文件(如果.d文件不存在则会根据包含文件名去找依赖关系生成.d文件)
include $(DEPENDS)

$(OUTDIR)/%.o: %.c
-mkdir -p $(dir $@); \
$(CC) -c $< -o $@

#生成依赖关系文件(形如xxx.d xxx.o = abc.h abc.c xy.c xy.h,目的是当有头文件或源文件被更新时,能够更新相关的.o和.d文件,而不是每次make都从头到尾编译一遍)
$(OUTDIR)/%.d:%.c
-mkdir -p $(dir $@); \
set -e; rm -f $@; \
$(CC) $(DEPENDFLAG) $(CFLAGS) $< > $@.$$$$; \
sed 's,\(.*\)\.o[ :]*,$*.o $@ : ,g' < $@.$$$$ > $@; \
rm -f $@.$$$$  

#################自定义Make命令####################

#删除生成的中间文件
.PHONY:clean
clean:
# -rm $(OBJS) $(DEPENDS) $(PROGRAM); \
-rm -R $(OUTDIR);

#安装文件
.PHONY:install
install:
cp -f $(PRORAM) ~/bin

#拷贝文件
.PHONY:cp
cp:
cp $(PROGRAM) ~/bin


阅读(344) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~