一。变量与函数的示例
<强>示例的要求强>
1。自动生成目标文件夹存放可执行文件
2。自动生成obj文件夹存放编译生成的目标文件
3。支持调试版本的编译选项
4。考虑代码的扩展性
<强>完成该示例所需的强>
1。美元(wildcardpattern)获取当前工作目录中满足模式的文件或目录列表
2。美元(addprefix _name)给名字列表名称的每一个名字增加前缀_prefix
<强>关键技巧强>
1。自动获取当前目录下的源文件列表(函数调用)
<代码> SRC:=$(通配符* . c) 代码>
2。根据源文件列表生成目标目标文件列表(变量的值替换)
<代码> obj:=$ (src: c=. o) 代码>
3。对每一个目标文件列表加上路径前缀(函数调用)
<代码> obj:=$(美元/addprefix路径,(obj)) 代码>
<>强规则中的模式替换(目录结构)强>
<代码> CC:=gcc MKDIR:=MKDIR RM:=RM - fr DIR_OBJS:=obj DIR_TARGET:=目标 DIRS:=(DIR_OBJS) (DIR_TARGET)美元 目标:=(DIR_TARGET)/hello-makefile.out美元 #主要。c const。c func.c src:=$(通配符* . c) #主要。o const。o func.o obj:=$ (src . c=. o): # obj/主要。o obj/常量。o obj/func.o obj:=$ (addprefix (DIR_OBJS)/美元,美元(obj)) .PHONY:重建干净 (目标):美元(DIRS) (obj)美元 $ (CC) - o $ @ $ (obj) 目标文件==比@echo”;$ @” 美元(DIRS): $ @ $ (MKDIR) 美元(DIR_OBJS)/%。o: % . c ifeq($(调试),真的) $ (CC) - o - g - c $ @ $ ^ 其他的 $ (CC) - o - c $ @ $ ^ endif 重建:清洁所有 :$(目标) 清洁: (RM)美元(DIRS) 代码>