Makefile

来源:互联网 发布:排版设计软件 编辑:程序博客网 时间:2024/06/06 11:44

Makefile 规则:

目标(target)... :依赖(prerequiries)...

    <tab>命令(command)

目标(target)通常是要生成的文件的名称,可以是可执行文件或OBJ文件,也可以是一个执行的动作名称,诸如“clean”。

依赖是用来产生目标的材料(比如源文件),一个目标经常有几个依赖。

        命令是生产目标时执行的动作,一个规则可以含有几个命令,每个命令占一行。


Makefile常用函数:

函数调用的格式:

$(function arguments)

这里“function”是函数名,“argument”是该函数的参数。参数和函数名之间用空格或tab隔开,如果有多个参数,他们
之间用逗号隔开。这些空格和逗号不是参数值的一部分。


1. 字符串替换和分析函数

(1)$ (subst from,to,text)。

在文本“test”中使用“to”替换每一处“from”

比如:

$ (subst ee,EE,feet on the street)

结果为“fEEt on the street”。


(2)$ (patsubst pattern,replacement,text)。

寻找“text”中符合格式“pattern”的字,用“replacement”替换它们。“pattern”和“replacement”中可以使用通配符。

比如:

$ (patsubst %.c,%.o,x.c.c bar.c)

结果为:“x.c.o bar.o”


(3)$ (strip string)。

去掉前导和结尾空格,并将中间的多个空格压缩为单个空格。

比如:

$(strip a    b c )

结果为“a b c”。


(4)$ (findstring find,in)。

在字符串“in”中搜寻“find”,如果找到,则返回值是“find”,否则返回值为空。

比如:

$ (findstring a,a b c)

$ (findstring a,b c)

将分别产生值“a” 和“  ”。


(5)$ (filter pattern...,text)。

返回在“text”中由空格隔开且匹配格式“pattern...” 的字,去掉不符合格式“pattern...” 的字。

比如:

$ (filter %.c %.s, foo.c bar.c baz.c ugh.h)

结果为“foo.c bar.c baz.s”


(6)$ (filter-out pattern...,text)

返回在“text”中由空格隔开且不匹配格式“pattern...” 的字,去除符合格式“pattern...”的字。它是函数filter的反函数。

比如:

$ (filter %.c %.s, foo.c bar.c baz.s ugh.h)

结果为“ugh.h”。


(7)$ (sort list)

将“list”中的字按字母顺序排序,并去掉重复的字。输出由单个空格隔开的字的列表。

比如:

$ (sort foo bar lose)

返回值是“bar foo lose”。


2. 文件名函数

(1)$ (dir names...)。

抽取“name...”中美一个文件名的路径部分,文件名的路径部分包括从文件名的首字符到最后一个斜杠(含斜杠)之前的一切字符。

比如:

$ (dir src/foo.c hacks)

结果为“src/ ./”。


(2)$ (notdir names...)。

抽取“names...”中每一个文件名路径部分外一切字符(真正的文件名)。

比如:

$ (notdir src/foo.c hacks)

结果为“foo.c hacks”


(3)$ (suffix names...)。

抽取“names...”中每一个文件名的后缀。

比如:

$ (suffix src/foo.c src-1.0/bar.c hacks)

结果为“.c .c”。


(4)$ (basenames names...)。

抽取“names...”中每一个文件名中除后缀外的一切字符。

比如:

$ (basename src/foo.c src-1.0/bar hacks)

结果为“src/foo src-1.0/bar hacks”。


(5)$ (addsuffix suffix,names...)

参数“names...”是一系列的文件名,文件名之间用空格隔开;suffix是一个后缀名。将suffix(后缀)的值附加在一个独立文件名的后面,完成后将文件名串联起来,他们之间用单个空格隔开。

比如:

$ (addsuffix .c,foo bar)

结果为“foo.c bar.c”


(6)$ (addprefix prefix,names...)

参数“names...”是一系列的文件名,文件名之间用空格隔开;prefix是一个前缀名。将preffix(前缀)的值附加在每一个独立文件名的前面,完成后将文件名串联起来,他们之间用单个空格隔开。

比如:

$ (addprefix src/,foo bar)

结果为“src/foo src/bar”。

(7)$ (wildcard pattern)。

参数“pattern”是一个文件名格式,包含有通配符(通配符和shell中用法一样)。函数wildcard的结果是一列和格式匹配且真实存在的文件的名称,文件名之间用一个空格隔开。

比如若当前目录下有文件1.c、2.c、1.h、2.h,则:

c_src := $ (wildcard *.c)

结果为“1.c 2.c”。


3.其他函数

(1)$ (foreach var,list,text)。

前两个参数,“var” 和 “list” 将首先扩展,最后一个参数“text”此时不扩展;接着,“list”扩展所得的每个字都赋给“var”变量;然后“text”引用该变量进行扩展,因此“text”每次扩展都不相同。

函数的结果是由空格隔开的“text”在“list”中多次扩展后,得到的新的“list”,就是说:“text”多次扩展的字串联起来,字与字之间由空格隔开,如此就产生了函数foreach的返回值。




0 0
原创粉丝点击