现在讲述如何写makefile的文章比较少,这是我想写这篇文章的原因。当然,不同产商的make各不相同,也有不同的语法,但其本质都是在“文件依赖性”上做文章,这里,我仅对GNU的make进行讲述,我的环境是RedHat Linux 8.0,make的版本是3.80。必竟,这个make是应用最为广泛的,也是用得最多的。而且其还是最遵循于IEEE 1003.2-1992 标准的(POSIX.2)。
名称:字符串替换函数——subst。 功能:把字串;中的;字符串替换成;。 返回:函数返回被替换过后的字符串。 示例: $(subst ee,EE,feet on the street), 把“feet on the street”中的“ee”替换成“EE”,返回结果是“fEEt on the strEEt”。 $(patsubst ;,;,;) 名称:模式字符串替换函数——patsubst。 功能:查找;中的单词(单词以“空格”、“Tab”或“回车”“换行”分隔)是否符合模式;,如果匹配的话,则以 ;替换。这里,;可以包括通配符“%”,表示任意长度的字串。如果;中也包含 “%”,那么,;中的这个“%”将是;中的那个“%”所代表的字串。(可以用“\”来转义,以“\%”来 表示真实含义的“%”字符) 返回:函数返回被替换过后的字符串。
“—debug[=;]” 输出make的调试信息。它有几种不同的级别可供选择,如果没有参数,那就是输出最简单的调试信息。下面是;的取值: a —— 也就是all,输出所有的调试信息。(会非常的多) b —— 也就是basic,只输出简单的调试信息。即输出不需要重编译的目标。 v —— 也就是verbose,在b选项的级别之上。输出的信息包括哪个makefile被解析,不需要被重编译的依赖文件(或是依赖目标)
等。 i —— 也就是implicit,输出所以的隐含规则。 j —— 也就是jobs,输出执行规则中命令的详细信息,如命令的PID、返回码等。 m —— 也就是makefile,输出make读取makefile,更新makefile,执行makefile的信息。