GNU_makefile中文手册
GNU make-英文
在 Makefile 使用 include 关键字可以把别的 Makefile 包含进来,这很像 C 语言的#include,被包含的文件会原模原样的放在当前文件的包含位置。
include 的语法是:
include
filename 可以是当前操作系统 Shell 的文件模式 (可以保含路径和通配符) 在 include前面可以有一些空字符,但是绝不能是[Tab]键开始。include 和
举个例子,你有这样几个 Makefile:a.mk、b.mk、c.mk,还有一个文件叫foo.make,以及一个变量$(bar),其包含了 e.mk 和f.mk,那么,下面的语句:
include foo.make *.mk $(bar)
等价于:
include foo.make a.mk b.mk c.mk e.mk f.mk
sinclude与include作用是一样的,为兼容而存在.
设置make生命周期内的环境变量(方便全局使用);设置后,其他路径的makefile(make -C 指定的路径makefile)即可以使用相关的变量.
export TOPDIR SRCTREE OBJTREE
当前的嵌套层数.
预设的 make 这个命令的名称(或者路径)
$(dir
名称:取目录函数——dir。
功能:从文件名序列中取出目录部分。目录部分是指最后一个反斜杠(“/”)之前的部分。如果没有反斜杠,那么返回“./”。返回:返回文件名序列的目录部分。示例: $(dir src/foo.c hacks)返回值是“src/ ./”。
名称:取文件函数——notdir。包括后缀,去除文件夹路径;
功能:从文件名序列中取出非目录部分。非目录部分是指最后一个反斜杠(“/”
)之后的部分。
返回:返回文件名序列的非目录部分。
示例: $(notdir src/foo.c hacks)返回值是“foo.c hacks”。
( s u f f i x < n a m e s . . . > ) 名 称 : 取 后 缀 函 数 — — s u f f i x 。 功 能 : 从 文 件 名 序 列 < n a m e s > 中 取 出 各 个 文 件 名 的 后 缀 。 返 回 : 返 回 文 件 名 序 列 < n a m e s > 的 后 缀 序 列 , 如 果 文 件 没 有 后 缀 , 则 返 回 空 字 串 。 示 例 : (suffix
$(basename
名称:取前缀函数——basename。包括路径;
功能:从文件名序列中取出各个文件名的前缀部分。
返回:返回文件名序列的前缀序列,如果文件没有前缀,则返回空字串。
示例:$(basename src/foo.c src-1.0/bar.c hacks)返回值是“src/foo src-1.0/bar h
acks”。
$(addsuffix ,
名称:加后缀函数——addsuffix。
功能:把后缀加到中的每个单词后面。
返回:返回加过后缀的文件名序列。
示例:$(addsuffix .c,foo bar)返回值是“foo.c bar.c”。
$(addprefix ,
名称:加前缀函数——addprefix。
功能:把前缀加到中的每个单词后面。
返回:返回加过前缀的文件名序列。
示例:$(addprefix src/,foo bar)返回值是“src/foo src/bar”。
名称:连接函数——join。
功能:把中的单词对应地加到的单词后面。如果的单词个数要比的多,那么,中的多出来的单词将保持原样。如果的单词个数要比多,那么,多出来的单词将被复制到中。对应位置的叠加,多余的原样输出;
返回:返回连接过后的字符串。
示例:$(join aaa bbb , 111 222 333)返回值是“aaa111 bbb222 333”。
Makefile中的字符串处理函数:
用法是$(subst FROM,TO,TEXT),即将TEXT中的东西从FROM变为TO
示例:
$(subst a,the,There is a big tree),
把“There is a big tree”中的“a”替换成“the”,返回结果是“There is the big tree”。
表示规则中的目标文件集。在模式规则中,如果有多个目标,那么, $@ 就是匹配于目标中模式定义的集合。
仅当目标是函数库文件时,表示规则中的目标成员名。例如,如果一个目标是 foo.a(bar.o),那么, $% 就是 bar.o , $@ 就是 foo.a 。如果目标不是函数库文件(Unix 下是 .a , Windows下是 .lib ),那么,其值为空
依赖目标中的第一个目标名字。如果依赖目标是以模式(即 % )定义的,那么 $< 将是符合模式的一系列的文件集。注意,其是一个一个取出来的
所有比目标新的依赖目标的集合。以空格分隔。
所有的依赖目标的集合。以空格分隔。如果在依赖目标中有多个重复的,那个这个变量会去除重复的依赖目标,只保留一份。
这个变量很像 $^ ,也是所有依赖目标的集合。只是它不去除重复的依赖目标。
这个变量表示目标模式中 % 及其之前的部分。如果目标是 dir/a.foo.b ,并且目标的模式是 a.%.b ,那么, $* 的值就是 dir/a.foo 。这个变量对于构造有关联的文件名是比较有用。如果目标中没有模式的定义,那么 $* 也就不能被推导出,但是,如果目标文件的后缀是 make 所识别的,那么 $* 就是除了后缀的那一部分。例如:如果目标是 foo.c ,因为 .c 是 make 所能识别的后缀名,所以, $* 的值就是 foo 。这个特性是 GNU make 的,很有可能不兼容于其它版本的make,所以,你应该尽量避免使用 $* ,除非是在隐含规则或是静态模式中。如果目标中的后缀是make 所不能识别的,那么 $* 就是空值。