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的返回值。
- Makefile
- Makefile
- makefile
- makefile
- makefile
- Makefile
- Makefile
- Makefile
- Makefile
- Makefile
- Makefile
- makefile
- Makefile
- makefile
- Makefile
- makefile
- makefile
- makefile
- J2EE——XML
- javasciprt强制类型转换
- android 获取所有传感器数据
- redmine1.3.x 插件安装
- 东华助手 v1.6.5
- Makefile
- linux 切换显卡
- 重建二叉树--中后找前
- Ubuntu 13.04双显卡安装NVIDIA GT630M驱动
- 我的extjs聊天机器人(二)
- 字符串生成器工具类(待完善)
- HTTP Live Streaming (HLS) 视频直播技术
- eclipse注释模版
- 【转】树状数组求区间和的一些常见模型