makefile 多目标和多规则
来源:互联网 发布:工具书阅读软件 编辑:程序博客网 时间:2024/06/07 05:57
makefile 多目标
一个规则中可以有多个目标,规则所定义的命令对所有目标有效。
多目标意味着所有的目标具有相同的依赖文件,多目标通常用在一下两种情况:
仅需要一个描述依赖关系的规则,不需要在规则中命令、例如:
kbd.o command.o files.o:command.h
这个规则实现了同时给三个目标文件制定一个依赖文件
对于多个具有类似重建命令的目标。重建这些目标的命令不需要完全相同。因为可以在命令行中使用自动环变量“$@”来引用具体的目标,完成重建,
例如:
big output littleoutput :text.g
generate text.g -$(subs output,,$@)>$@
这个等价于:
bigoutput :text.g
generate text.g -big >bigoutput
littleoutput :text.g
generate text.g -little >littleoutput
例子中的“generate”根据命令行参数来决定输出文件的类型。使用make的字符串处理函数“subst”来根据目标产生对应的命令行选项。
虽然在多目标的规则中,可以根据不同目标使用不同的命令(在命令行中使用自动化变量$@)。但是,多目标规则并不能做到根据目标文件自动改变依赖文件(像上边例子中使用自动化变量$@改变规则的命令一样)。需要实现这个目的是,要用到make的静态模式。
多规则:
多规则不同于多目标,这个指的是一个文件作为多个规则的目标。
对于一个多规则的目标,重建此目标的命令只能出现在一个规则中(可以是多条命令)。如果多个规则同时给出重建此目标的命令,make使用最后一个规则中所定义的命令,同时提示错误信息。
makefile通常存在一个变量,就像我们以前提到的“objects”,它定义为所有需要变异生成.o文件的列表,当这些.o文件在其源文件所包含的头文件config.h发生变化之后能够自动的被重建,我们可以使用多目标的方式来书写makefile:
objects=foo.o bar.o
foo.o:defs.h
bar.o:defs.h test.h
$(objects):config.h
这样做的好处是:我们可以再源文件增加或删除包含头文件以后不用修改已经存在的makefile的规则,只需要增加或者删除某一个.o文件依赖的头文件。这种方式很简单也很方便。对于一个大的工程来说,这样做的好处显而易见。我们也可以通过一个变量来增加目标的依赖文件,使用make命令来定义某一个目标的依赖头文件,例如:
extradeps=$(objects):$(extradeps)
程序的意思是我们如果执行“make extradeps=foo.h”那么“foo.h”将作为所有的.o 文件的依赖文件,但是如果只执行make的话,就没有指定任何文件作为.o文件的依赖文件。
Makefile文件条件语句的三个关键字:
1.ifeq 表示条件语句的开始,并指定了一个比较条件(相等)。之后是用圆括号括包围的。使用逗号“,”分割的两个参数,和关键字“ifeq”用空格分开,参数中的变量引用在进行变量值比较时被展开。“ifeq”之后就是当满足条件make需要执行的,条件不满足时忽略。
2.“else”之后就是当天剑不满足是执行部分。
3.“endif”表示一个条件语句的结束,任何一个条件表达式都必须以“endif”结束
关键字“ifneq”
此关键字是用来判断参数是否不相等,格式为:
ifneq(ARG1,ARG2)
关键字 “ifdef”
关键字“ifdef”用来判断一个变量是否已经定义。格式为:
ifdef VARIABLE-NAME
如果变量VARIABLE-NAME的值非空,那么表达式为真。
对于indef需要说明的是:ifdef只是测试一个变量是否有值,不会对变量进行替换展开来判断变量的值是否为空。
比如说 :
bar =
foo =$(bar)
ifdef foo 就是为真的,因为它内部有值
而 indef bar 是返回false的,因为,他是空值。
关键字 “ifndef”实现的功能和“ifdef”相反。
在条件表达式中不能使用自动化变量,自动化变量在规则命令执行时才有效。
- makefile 多目标和多规则
- MAKEFILE--多目标
- [makefile] 多目标依赖
- 多目标makefile写法
- Makefile 和 make 规则
- makefile和make规则
- makefile 之多目录,多目标编译
- makefile多规则目标
- Makefile的后缀规则和模式规则
- Makefile 中的变量和规则
- 跟我一起写Makefile(8)--- 书写规则(规则语法+通配符+文件搜索+伪目标+多目标+静态模式+自动依赖)
- make和Makefile中的规则和变量
- makefile 多目标 静态模式 自动生成依赖性
- makefile详解 多目标 静态模式 十三
- Makefile常用变量和规则备忘
- makefile文件语法规则和配置
- MAKEFILE文件的语法规则和配置
- Makefile: 混合的隐含和普通规则
- HDU 4940 Destroy Transportation system(上下界网络流)
- C++面向对象高级开发No.2 - Class With Pointer
- poj 2481 Cows 树状数组
- 【笔试】7、统计出其中英文字母、空格、数字和其它字符的个数
- 黑马程序员--java基础--基础语法
- makefile 多目标和多规则
- UITableView
- JAVA版微信支付V3-完全版
- scala 第75讲:模式匹配下的For循环
- 栈的压入、弹出序列
- 触摸和摇一摇
- gcc简单使用
- 微信支付详解
- orcale 控制用户权限