第十一部分 隐含规则(四)

2024-01-18 10:36

本文主要是介绍第十一部分 隐含规则(四),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

目录

一、老式风格的"后缀规则"

二、隐含规则搜索算法


一、老式风格的"后缀规则"

        后缀规则是一个比较老式的定义隐含规则的方法。后缀规则会被模式规则逐步地取代。 因为模式规则更强更清晰。为了和老版本的 Makefile 兼容,GNU make 同样兼容于这些东西。 后缀规则有两种方式:"双后缀"和"单后缀"。

        双后缀规则定义了一对后缀:目标文件的后缀和依赖目标(源文件)的后缀。如".c.o" 相当于"%o : %c"。单后缀规则只定义一个后缀,也就是源文件的后缀。如".c"相当于 "% :%.c"。

         后缀规则中所定义的后缀应该是 make 所认识的,如果一个后缀是 make 所认识的,那么 这个规则就是单后缀规则,而如果两个连在一起的后缀都被 make 所认识,那就是双后缀规 则。例如:".c"和".o"都是 make 所知道。因而,如果你定义了一个规则是".c.o"那么其就 是双后缀规则,意义就是".c"是源文件的后缀,".o"是目标文件的后缀。如下示例:

.c.o:

$(CC) -c $(CFLAGS) $(CPPFLAGS) -o $@ $<

后缀规则不允许任何的依赖文件,如果有依赖文件的话,那就不是后缀规则,那些后缀统统 被认为是文件名,如:

.c.o: foo.h

$(CC) -c $(CFLAGS) $(CPPFLAGS) -o $@ $<

这个例子,就是说,文件".c.o"依赖于文件"foo.h",而不是我们想要的这样:

%.o: %.c foo.h

$(CC) -c $(CFLAGS) $(CPPFLAGS) -o $@ $<

后缀规则中,如果没有命令,那是毫无意义的。因为他也不会移去内建的隐含规则。

        而要让 make 知道一些特定的后缀,我们可以使用伪目标".SUFFIXES"来定义或是删除, 如:

.SUFFIXES: .hack .win

把后缀.hack 和.win 加入后缀列表中的末尾。

.SUFFIXES: # 删除默认的后缀

.SUFFIXES: .c .o .h # 定义自己的后缀

先清楚默认后缀,后定义自己的后缀列表。

        make 的参数"-r"或"-no-builtin-rules"也会使用得默认的后缀列表为空。而变量 "SUFFIXE"被用来定义默认的后缀列表,你可以用".SUFFIXES"来改变后缀列表,但请不要改 变变量"SUFFIXE"的值。

二、隐含规则搜索算法

        比如我们有一个目标叫 T。下面是搜索目标 T 的规则的算法。请注意,在下面,我们没 有提到后缀规则,原因是,所有的后缀规则在 Makefile 被载入内存时,会被转换成模式规 则。如果目标是"archive(member)"的函数库文件模式,那么这个算法会被运行两次,第一 次是找目标 T,如果没有找到的话,那么进入第二次,第二次会把"member"当作 T 来搜索。

         1、把 T 的目录部分分离出来。叫 D,而剩余部分叫 N。(如:如果 T 是"src/foo.o",那 么,D 就是"src/",N 就是"foo.o")

        2、创建所有匹配于 T 或是 N 的模式规则列表。

        3、如果在模式规则列表中有匹配所有文件的模式,如"%",那么从列表中移除其它的模 式。

        4、移除列表中没有命令的规则。

        5、对于第一个在列表中的模式规则:

1)推导其"茎"S,S 应该是 T 或是 N 匹配于模式中"%"非空的部分。

2)计算依赖文件。把依赖文件中的"%"都替换成"茎"S。如果目标模式中没有包含 斜框字符,而把 D 加在第一个依赖文件的开头。

3)测试是否所有的依赖文件都存在或是理当存在。(如果有一个文件被定义成另外 一个规则的目标文件,或者是一个显式规则的依赖文件,那么这个文件就叫"理当存在")

4)如果所有的依赖文件存在或是理当存在,或是就没有依赖文件。那么这条规则 将被采用,退出该算法。

        6、如果经过第 5 步,没有模式规则被找到,那么就做更进一步的搜索。对于存在于列 表中的第一个模式规则:

1)如果规则是终止规则,那就忽略它,继续下一条模式规则。

2)计算依赖文件。(同第 5 步)

3)测试所有的依赖文件是否存在或是理当存在。

4)对于不存在的依赖文件,递归调用这个算法查找他是否可以被隐含规则找到。

5)如果所有的依赖文件存在或是理当存在,或是就根本没有依赖文件。那么这条 规则被采用,退出该算法。

        7、如果没有隐含规则可以使用,查看".DEFAULT"规则,如果有,采用,把".DEFAULT" 的命令给 T 使用。

         一旦规则被找到,就会执行其相当的命令,而此时,我们的自动化变量的值才会生成。

这篇关于第十一部分 隐含规则(四)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/618756

相关文章

Adblock Plus官方规则Easylist China说明与反馈贴(2015.12.15)

-------------------------------特别说明--------------------------------------- 视频广告问题:因Adblock Plus的局限,存在以下现象,优酷、搜狐、17173黑屏并倒数;乐视、爱奇艺播放广告。因为这些视频网站的Flash播放器被植入了检测代码,而Adblock Plus无法修改播放器。 如需同时使用ads

关联规则(一)Apriori算法

此篇文章转自 http://blog.sina.com.cn/s/blog_6a17628d0100v83b.html 个人觉得比课本上讲的更通俗易懂! 1.  挖掘关联规则 1.1   什么是关联规则 一言蔽之,关联规则是形如X→Y的蕴涵式,表示通过X可以推导“得到”Y,其中X和Y分别称为关联规则的先导(antecedent或left-hand-side, LHS)和后

电子电气架构---私有总线通信和诊断规则

电子电气架构—私有总线通信和诊断规则 我是穿拖鞋的汉子,魔都中坚持长期主义的汽车电子工程师。 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 屏蔽力是信息过载时代一个人的特殊竞争力,任何消耗你的人和事,多看一眼都是你的不对。非必要不费力证明自己,无利益不试图说服别人,是精神上的节能减排。 无人问津也好,技不如人也罢,你都要试着安静下来,去做自己该做的事.而不是让内心的烦躁、

Python中的单下划线和双下划线使用规则

引言 Python 遵循一些关键的命名规则,这些规则涉及到使用单个或双下划线。通过这些规则,你可以在应用程序接口(API)中区分可访问的和不可访问的标识符,编写适用于继承的稳健类,以及防止命名冲突等。 遵守这些规则,你的代码将显得更贴近 Python 的风格,并且在其他 Python 程序员看来更加统一。这项技能在你为其他开发者编写代码时尤为重要。 本文[1]将带你了解: 基于使用下划线

【0324】Postgres内核 Shared Buffer Access Rules (共享缓冲区访问规则)说明

0. 章节内容 1. 共享磁盘缓冲区访问机制 (shared disk buffers) 共享磁盘缓冲区有两套独立的访问控制机制:引用计数(a/k/a pin 计数)和缓冲区内容锁。(实际上,还有第三级访问控制:在访问任何属于某个关系表的页面之前,必须持有该关系表的适当类型的锁。这里不讨论关系级锁。) Pins 在对缓冲区做任何操作之前,必须“对缓冲区pin”(即增加其引用计数, re

微积分直觉:隐含微分

目录 一、介绍 二、梯子问题 三、结论 四、一个额外的例子 一、介绍         让我们想象一个半径为 5 的圆,以 xy 平面为中心。现在假设我们想在点 (3,4) 处找到一条切线到圆的斜率。         好吧,为了做到这一点,我们必须非常接近圆和切线之间的空间,并沿着该曲线迈出一小步。该步骤的 y 分量为 dy,x 分量为

[mysql]SQL语言的规则和规范

规则 是什么呢,规则就是我们最基本,每时每刻都要遵守的比如人行道靠右,不能逆行, 规范 呢就是锦上添花,如果你不这么做,是不那么道德,不那么好的,就像小学生见到老师要问好,不问好可以吗,当然也是可以的,但是这样就不那么礼貌了。但是也不会开除你, 规范是建议。规则: USE dbtest2 SELECT * FROM emp 我们之前使用cmd操作的时候,是不是必须要先选择一个数据

AI聊天应用不能上架?Google play对AI类型应用的规则要求是什么?

随着生成式AI模型的广泛应用,很多开发者都有在开发AI应用或将其整合到应用中。我们知道,谷歌是非常注重应用生态的,去年开始就推出了一些针对生成式AI应用的政策,对AI应用的内容质量和合规性问题提出了一些要求。 几天前,还有开发者聊到,现在AI类型应用(如AI聊天)上架越来越难了。 (可斯信进qun与众多开发者交流上架经验) 这很可能是没了解清楚Google play 对AI应用的一些

【重学 MySQL】十二、SQL 语言的规则与规范

【重学 MySQL】十二、SQL 语言的规则与规范 基本规则注释语法规则命名规则基本命名规则具体命名规范其他注意事项 数据导入指令 SQL(Structured Query Language,结构化查询语言)的规则与规范是确保SQL语句能够正确执行、提高代码可读性和可维护性的基础。 基本规则 语句结构: SQL语句可以写在一行或多行中,为了提高可读性,建议将各子句分行

线性代数|机器学习-P33卷积神经网络ImageNet和卷积规则

文章目录 1. ImageNet2. 卷积计算2.1 两个多项式卷积2.2 函数卷积2.3 循环卷积 3. 周期循环矩阵和非周期循环矩阵4. 循环卷积特征值4.1 卷积计算的分解4.2 运算量4.3 二维卷积公式 5. Kronecker Product 1. ImageNet ImageNet 的论文paper链接如下:详细请直接阅读相关论文即可 通过网盘分享的文件:image