随笔 - 60, 文章 - 0, 评论 - 197, 引用 - 0
数据加载中……

Makefile 模板

# 下面的变量可以在shell 的环境变量里面指定。
# 也可以象下面这样在 Makefile 里面指定。
# CC=gcc                                          # 编译器
# CFLAGS=-Wall -Werror -g           # 编译器参数
# LD=gcc                                          # 连接器参数
# LDFLAGS= $(LIBS)  -lpthread      # 连接器参数
# DEPENDFLAG=-MM                   # 生成依赖关系文件的参数
# INCLUDES=-Idir1 -Idir2               # 指明包含外部头文件的目录
# LIBS=-la -lb -lc                              # 指明引用外部的库文件

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


#指明项目中,包含源程序的所有的子目录。
SRCDIRS=.
#指明最终生成的可执行文件的名称
PROGRAMS=test.exe


#下面的部分一般不用改动
#从所有子目录中得到源代码的列表
SRCS=$(foreach dir,$(SRCDIRS),$(wildcard $(dir)/*.c))


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

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


#指明默认目标是生成最终可执行文件。
all: $(PROGRAM)


#生成依赖关系文件
%.d:%.c
        $(CC) $(DEPENDFLAG) $(CFLAGS)  $< |\
        sed "s?\\(.*\\):?$(basename $<).o $(basename $<).d :?g" \
        > $@ || $(RM) $@

$(PROGRAMS): $(OBJS)
        $(CC) $(LDFLAGS) -o $@ $(filter %.o ,$+)


# 包含入依赖关系文件
include $(DEPENDS)


# 删除生成的中间文件
clean:
        rm $(OBJS) $(DEPENDS) $(PROGRAMS)

posted on 2007-09-06 18:40 Normandy 阅读(1966) 评论(0)  编辑 收藏 引用 所属分类: Makefile


只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理