9、隐含规则
- 格式:docx
- 大小:30.25 KB
- 文档页数:13
关于数字九知识点总结数字九的特点在十进制数制中,数字九是一个很特殊的数字,它是最大的一位数,也是最小的一个两位数。
在九以内的数中,九是唯一一个不是自身的数字。
另外,任何一个数字乘以9的乘积的各位数字之和都等于9,这就是所谓的“9的倍数之位数和必定为9”的特点。
数字九在数学运算中的特殊性首先是九乘法口诀。
在学习乘法运算时,九的乘法口诀给我们记忆乘法表提供了便利。
例如,9乘以1等于9,9乘以2等于18,9乘以3等于27,以此类推,9乘以任何一个数,其个位数都会依次递增,而十位数则依次递减。
这一规律的存在使得乘法口诀更加易于记忆。
另外,在数学运算中,九也有“竖式减法法则”。
例如,我们做减法运算时,可以将被减数的十位和个位数分别减去9,再将减数和差的个位数进行减法运算,最后将两个差相加,就得到了被减数和减数的差。
这种方法在计算减法时非常方便,可以减少计算的复杂度,提高计算的速度。
数字九在文化象征中的意义数字九在中国传统文化中有着丰富的象征意义。
首先,在汉字中,数字九和长久、永恒、长寿等含义相关联。
例如,九九归一、长久、永久之意。
在婚礼中,九是长久和永恒的象征,所以九九重阳节、九九登高节等都是中国传统节日。
其次,在中华传统文化中,九也是一个吉祥的数字。
九九重阳节和九九登高节是古老的民间节日,人们会在这一天聚在一起登高祈福,希望得到吉祥和长寿的福祉。
此外,大家都很熟悉的“九州” 一词,便是指古代中国的九大区域。
数字九在历史传统中的意义在中国传统历法中,数字九也有着特殊的地位。
最有名的应该是“九运六度”的说法。
古代中国的历法中,将九的倍数(9、18、27、36)称为九运,分别对应九个月的孕期,表示一个周期的完成和新生,具有循环更新的意义。
六度是指一年中的六个重要节气,分别是立春、清明、立夏、立秋、立冬、大雪,也代表了一个完整的季节的变迁和人生的轮回。
而在《易经》中,九阳和六阴构成了一切事物的重要原理。
这种数字九在历史传统中的意义,体现了中国古代人们对数字九的特殊推崇和理解。
奇妙的数字9的小知识数字9一直以来都被认为是一个神秘而奇妙的数字。
在很多文化和领域中,数字9都具有特殊的意义和象征。
下面,让我们一起探索一些关于数字9的小知识吧!一、数字9在数学中的特殊性1. 九乘法表:我们都知道,乘法表中的9乘法表格外特殊。
例如,9乘以1等于9,9乘以2等于18,9乘以3等于27,以此类推,这样的规律一直延续到9乘以10等于90。
有趣的是,这些结果的个位数之和总是等于9。
这是因为,任何一个大于1的数字乘以9,再把乘积的各位数相加,最终都会得到9的倍数。
这也是人们常说的“九九归一法”的由来。
2. 九宫格:九宫格是由一个3x3的方格组成的,每个方格内填入1至9的数字,使得每行、每列以及对角线上的数字之和都相等。
九宫格是古代数学中的经典问题之一,也是数学游戏中常见的题目。
它具有很高的艺术性和趣味性,被广泛应用于数学教育和智力训练中。
二、数字9在文化中的象征意义1. 九天玄女:在中国神话传说中,九天玄女是掌管天地秩序的女神,她具有神秘和圣洁的形象,被尊奉为天地的守护者。
九天玄女也象征着人们对于完美和神圣的追求。
2. 九重天:在古代中国传说中,九重天是指天空中的九个层级,每个层级都有不同的神仙居住。
九重天象征着神的世界和人间的联系,是人们向往的仙境。
3. 九州大地:在中国古代的地理概念中,九州是指全国的九个行政区域。
九州大地代表着中国的疆域和人民的聚居地,也象征着国家的统一和繁荣。
三、数字9在其他领域的应用1. 九九消消乐:九九消消乐是一款经典的益智游戏,玩家需要通过消除相同的数字方块来获得高分。
这款游戏不仅考验玩家的观察力和反应能力,还能锻炼玩家的思维和逻辑能力。
2. 九阳真经:在武侠小说《神雕侠侣》中,九阳真经是一本强大的武功秘籍,被誉为武林至高无上的绝学。
九阳真经的修炼需要极高的内功和武德,只有少数人能够领悟和掌握。
3. 九球:九球是一种台球的变种,使用9个编号的球,通过将其按照规定的顺序击入球袋来获胜。
关于数字9的知识数字9是自然数中的一个数字,它在数学、科学和文化中都有着独特的意义和价值。
下面将从不同的角度介绍数字9的一些知识和特点。
一、数学中的数字91. 九九乘法表:九九乘法表是学习数学时最基础的内容之一,也是学习数字9的一个好方法。
九九乘法表中的每个数都是由数字9与1到9的乘法组合而成的,反映了乘法运算的规律和九九乘法的结果。
2. 九的倍数:数字9是一个奇特的数字,它的所有倍数的各位数字的和都是9的倍数。
例如,9的倍数18,1+8=9;90的倍数180,1+8+0=9;900的倍数1800,1+8+0+0=9。
这个特性在数学运算中有一定的应用价值。
3. 九的平方:数字9的平方是81,是一个两位数的平方数。
它具有很多有趣的性质,比如它的各位数字之和等于9,同时它的十位数与个位数之和也等于9。
在数学中,九的平方常常用于计算和推导。
4. 九进制:九进制是一种进制系统,它使用9个数字(0-8)来表示数值。
与常见的十进制(0-9)不同,九进制没有数字9,而是使用数字8表示。
九进制在计算机科学领域有一定的应用,用于编码和计算。
二、科学中的数字91. 九大行星:在太阳系中,我们通常认为有九大行星,它们分别是:水星、金星、地球、火星、木星、土星、天王星、海王星和冥王星。
尽管冥王星在2006年被国际天文学联合会重新定义为“矮行星”,但它仍然在科学界被广泛讨论和研究。
2. 九个天干:在中国传统文化中,天干是表示年份、月份、日期等的重要符号。
天干由十个字组成,其中九个字分别与数字1-9对应,分别是甲、乙、丙、丁、戊、己、庚、辛、壬。
这九个天干与地支(十二生肖)组合,构成了中国农历的年份纪年法。
三、文化中的数字91. 九尾狐:九尾狐是中国古代神话传说中的一种狐狸精,它有九条尾巴,象征着神秘、聪明和妖异的力量。
九尾狐在中国文化中有着重要的地位,被广泛描绘在文学、戏剧、电影等艺术作品中。
2. 九宫格:九宫格是一种布局方式,它由3行3列的格子组成。
关于9的知识点总结首先,我们来看一些关于数字9的基本性质。
9是一个素数,这意味着它除了1和它本身以外没有其他因数。
另外,9还是一个非平方数,因为它没有一个整数平方根。
9的立方是729,而9的平方是81。
此外,9是一个和数字2有趣的数字,因为9的九次方等于387420489,其中每个数字相加得到39,而39是其自身的和的约数。
在十进制系统中,数字9还具有一些神秘的性质。
例如,任何十进制整数的数字和如果是9的倍数,那么这个整数也是9的倍数。
另外,九乘以任何数字后,其数字相加得到的和都会是9的倍数。
这个性质被称为数字根规则,可以用来检查计算结果是否正确。
在数学运算中,数字9也有一些特别的性质。
例如,任何一个整数乘以9后,其乘积的数字和都会是9。
这可以用来简化乘法运算。
另外,由于这个性质,9可以用来判断一个数字是否是9的倍数。
如果一个数字的每一位数字相加得到的和是9的倍数,那么这个数字也是9的倍数。
另外,9还具有一些有趣的数论性质。
例如,9和其乘积的数字和总是9的倍数。
这意味着,所有的乘积都会在进行重复的数字相加运算后回到9这个数字。
这个性质可以用来解决一些数论问题,也是数学界的一种有趣的现象。
除了数学中的性质,数字9在日常生活中也有一些有趣的应用。
例如,在时间中,我们通常将一天分成24小时,而每个小时又分成60分钟。
然而,在某些文化和传统中,一天被分成12个时间单位,每个单位被称为一个“时辰”。
其中,每个时辰由两个“刻”组成,而每个刻又被分成9分钟。
这种时间单位的划分方式被广泛应用于中国古代的时间系统中。
此外,数字9还在音乐和艺术中被广泛应用。
在音乐中,我们通常将音符分成8个音阶,然而在某些情况下,音符也被分成9个音阶。
在绘画中,九宫格被认为是一种有趣的构图方式,其结构可以将画面分成9个部分,每个部分都有自己的特点和功能。
在文化和历史中,数字9也具有一些特别的含义。
在许多文化中,9被认为是一个幸运的数字,因为它代表着长久、长寿和隆重。
10进制在世界范围内的普及和标准化,奠定了整个数学大厦的基石,而我们今天要学习的神奇的“9“和10也有千丝万缕的关系,”弃9法“等实用的方法也应运而生。
今天就让我们步入数字的海洋,来看一看9有哪些神奇之处。
神奇的9第九讲【知识点睛】1.弃九法:⑴一个数除以9的余数,和这个数的数字和除以9的余数相同。
【112564832除以9的余数等于(1+1+2+5+6+4+8+3+2)除以9的余数】⑵可将数任意截断,每一部分除以9的余数和的余数就是原数除以9的余数。
【1234567891011…2016除以9的余数和(1+2+3+…+2016)除以9的余数相同】*注意:余数具有可加性、可减性(同余定理)、可乘性、可乘方性,没有“可除性”(有在一定条件下满足的“慎除性”)。
2.加法数字谜的一条规律:⑴在竖式中加数总共进了几位,和的数字和就比加数的数字和减少几个9。
⑵减法竖式可转换为加法竖式。
3.三阶幻方(九宫格,洛书)的特殊性质:8条线(3行、3列、2对角线)的三数之和都是15,且15的不计顺序的正整数分拆也恰好有8种。
4.同余符号:一个数a与它的各个数位数字和b除以9的余数相同,这句话可用数学符号表示为:【例题精讲】【例1】(1)求7123021除以9的余数;(2)求7813×1768除以9的余数;(3)求 uu uu除以9的余数。
【练一练1】(1)求6354279816除以9的余数;(2)求12345×67890除以9的余数;(3)求 除以9的余数。
【例2】将1~2013写成一排:1234……20122013,求这个数除以9的余数。
【练一练2】检验此式是否正确:135987984+981252341=1117241325。
【例3】从0、1、2、3、4、5、6、7、8、9这10个数字中,选出9个不同数字填入下面的方框中,使等式成立,则其中未被选中的数字是____.【练一练3】1234×99999乘积的各位数字之和为_____.【例4】已知2的29次方( ∀)由9个不同数字组成,那么缺少哪个数字?【练一练4】A的数字之和为100,B的数字之和为50,A-B借了5次位,则A-B的差的数字之和为____。
数独九宫格规律口诀数独这玩意儿啊,就像是一个神秘的数字迷宫,九宫格就是那迷宫里的九个小天地。
要想在这九宫格的小世界里畅游,没有点口诀那可不行。
先说这个“排除法”,这就好比你在一群小动物里找小老鼠。
每行每列每个小九宫格都只能有一个1到9的数字,就像每个小窝只能住一只小动物。
如果某一行已经有了个3,那这一行其他地方的3就像被施了魔法一样,全都不能存在了。
这就像是小老鼠已经占了一个小窝,其他小老鼠就不能再挤进去啦。
再说说“唯余法”,这简直就是在数字堆里找那个独一无二的“宝藏数字”。
当一个格子周围的数字都差不多齐了,就剩下那么一两个可能的数字,那就像在一群穿着相似衣服的人中,突然发现有个穿奇装异服的家伙,那这个数字肯定就是这个格子的啦。
这时候就像是你在一堆苹果里找到了那个唯一的大梨一样惊喜。
还有那个“数对占位法”呢,这就像是两个小伙伴约好了要一起占地方。
比如两个数字只能在某两个格子里,那这两个格子就被它们俩给承包了,其他数字就只能干瞪眼。
这就好比两个好朋友手拉手,圈出了属于他们的小地盘,谁也别想挤进来。
“宫内数对占位法”呢,就像是在一个小家庭里搞小团体。
在一个小九宫格里,有两个数字就只能在某两个特定的位置,那这个小九宫格就像是它们的小天地,别的数字看着这两个数字在那耍酷,也没办法。
这就像在一个小房子里,两个调皮的小孩占了最好的两个小角落。
玩数独就像是一场数字的战争,而这些口诀就是你的武器。
如果你不用这些口诀,就像上战场不带枪一样傻。
每一个九宫格都是一个小战场,每个数字都是一个小战士,它们要按照规则排兵布阵。
你要是掌握了这些口诀,就像拥有了魔法棒。
在数独的世界里,你就可以随心所欲地指挥那些数字,让它们乖乖听话。
就像你是一个伟大的将军,数字就是你的士兵,你让它们站哪就站哪。
有时候,数独会让你觉得像掉进了数字的漩涡,头晕目眩的。
但是一旦你想起这些口诀,就像抓住了救命稻草,一下子就又能理清思路。
这就像是在黑暗中突然找到了手电筒,一下子就照亮了前方的道路。
9的乘法隐含的规律
二年级学生学习“9的乘法口诀”已是乘法学习的最后一节了,我们从不同的角度去观察,会发现9的乘法隐含许多规律。
而引导学生去发现这些规律,既能帮助学生快速掌握知识,熟记口诀,又能培养学生观察、分析、抽象、归纳等方面的能力,开启智慧。
作为教者有如下操作细节要认真把握:
一是应将9个算式排成一排,最好是竖向排列九个算式,这样,便于学生自上而下或自下而上,按顺序观察、思考,去除视觉干扰,迅速找到规律。
二是要引导学生从不同的角度去观察、发现、总结规律。
我认为可引导学生从如下几个角度去发现规律:
●九乘几的积比几十少几。
一个九比一个十少一;二个九比二十少二;依此类推,九个九比九十少九。
掌握这一规律,便于学生判断:几个九至少不会大于或等于几十,尤其在判断9×5和9×6时可起到快速辩别的作用。
●积的个位数字与十位数字的和是九。
掌握这一规律,便于学生快速记忆口诀,特别是快速记忆个位数字。
●这一组积的个位数字依次减1,十位数字依次加1。
引导学生自上而下或自下而上观察这一组式,不难发现这一规律。
在发现这一规律的过程中,我们引导学生进行了抽象、归纳,发展了逻辑思维能力。
数学9宫格填数字规律数学9宫格是一个由3行3列组成的正方形格子,每个格子可以填写一个数字。
填数字的规律是通过已给出的一些数字,根据数学的原理和逻辑,推理出其他格子中应填写的数字。
以下是一种基本的填数字规律方法:1.唯余法:当一个格子周围的8个格子中已经填了8个数字时,就可以推断出该格子中应填写的数字。
例如,如果一个格子周围的8个格子分别填写了1到8的数字,那么该格子中应填写的数字就是9。
2.限定法:通过限定每一行、每一列和每一个九宫格内的数字范围,来推断出格子中应填写的数字。
例如,如果已经填了一行数字1到8,那么该行的最后一个格子中应填写的数字就是9。
3.排除法:通过排除已经填过的数字,来推断剩余的数字。
例如,如果一个格子周围的8个格子中都已经填了1到7的数字,那么该格子中应填写的数字就是8。
4.数组法:根据数学原理和逻辑,推断出每一行、每一列和每一个九宫格内应填写的数字,然后进行填写。
例如,在一行中已经填了数字1、3、7,那么该行的剩余两个格子中应填写的数字就是2和9。
5.分块法:将整个九宫格分为四个角、四个边和一个中心,根据已经填写的数字,推断出四个角、四个边和中心应填写的数字,然后进行填写。
以上是一些基本的填数字规律方法,但实际上数学9宫格填数字规律是非常灵活的,还可以根据具体情况采用其他方法。
填数字的关键在于通过已给出的一些数字,运用数学原理和逻辑,不断推理和填写,最终填满整个九宫格。
在实际操作时,可以先观察已给出的数字,找出它们之间的规律和限制条件,然后根据这些规律和限制条件,逐步填写其他格子中的数字。
有时需要进行多次推理和填写,一步步逼近正确答案。
填数字还需要一定的数学思维和逻辑推理能力。
需要善于观察和分析,灵活运用各种数学原理和规则,同时要保持耐心和细致,避免出错。
数学9宫格填数字是一项锻炼数学思维和逻辑推理能力的活动,对于提高数学素养和解决问题的能力有很大帮助。
总之,数学9宫格填数字是一项需要运用数学原理和逻辑推理的活动。
9宫格数字含义大全摘要:1.引言:数字9宫格的起源和流行2.数字9的寓意:轮回、完整、包容等3.9宫格数字含义的具体解读a.中心数字9:智慧、领导力、创造力b.上下左右四个数字:事业、家庭、人际关系、财运c.四个角落的数字:健康、爱情、信仰、学业4.如何运用9宫格数字含义改善生活5.结语:9宫格数字含义的实用价值和启示正文:【引言】在现代社会,数字不仅仅是一种计数工具,还蕴含着丰富的哲学思想和心理学含义。
其中,9宫格数字含义作为一种流行的算命方法,备受人们关注。
它通过解读数字的组合和分布,揭示一个人的性格、命运和运势,帮助人们更好地认识自己和规划生活。
【数字9的寓意】数字9在9宫格中具有特殊的象征意义。
在中国传统文化中,9代表着轮回、完整和包容。
古人有“九九归一”的说法,意味着事物的周期性循环和不断升华。
同时,9也是一个位数最大的数字,象征着至高无上的地位和权力。
【9宫格数字含义的具体解读】9宫格数字含义分为四个部分:中心数字、上下左右四个数字和四个角落的数字。
【中心数字9】中心数字9代表着一个人的核心特质,包括智慧、领导力和创造力。
拥有中心数字9的人通常具有很高的智慧,善于思考和解决问题。
他们在领导力方面表现出较强的能力,能够带领他人共同前进。
同时,他们富有创造力,能够在各种领域取得优异的成绩。
【上下左右四个数字】上下左右四个数字分别代表着一个人的事业、家庭、人际关系和财运。
这些数字组合可以揭示一个人在各个方面的表现和运势。
例如,一个人事业方面的数字表示他在职场上的发展潜力,家庭方面的数字反映家庭关系和幸福感,人际关系数字显示人际交往能力,财运数字则揭示财富状况。
【四个角落的数字】四个角落的数字代表着一个人的健康、爱情、信仰和学业。
这些数字可以揭示一个人在生活中的喜怒哀乐,帮助他们了解自己在各个方面的需求和成长方向。
例如,健康数字表示身体状况,爱情数字反映感情生活,信仰数字显示信仰和价值观,学业数字则反映学术成就。
GNU make中文手册ver - 3.8译者:徐海兵2004-09-11目录GNU make中文手册 (1)ver - 3.8 (1)第一章:概述 (7)1.1Make之前基本知识: (7)1.1.1概述 (7)1.1.2准备知识 (8)1.2GNU make介绍 (8)1.2.1Makefile简介 (9)1.2.2Makefile规则介绍 (10)1.2.3简单的示例 (11)1.2.4make如何工作 (12)1.2.5指定变量 (13)1.2.6自动推导规则 (14)1.2.7另类风格的makefile (15)1.2.8清除工作目录过程文件 (16)第二章:Makefile 总述 (16)2Makefile概述 (16)2.1Makefile的内容 (16)2.2makefile文件的命名 (18)2.3包含其它makefile文件 (18)2.4变量MAKEFILES (20)2.5变量MAKEFILE_LIST (21)2.6其他特殊变量 (22)2.7makefile文件的重建 (22)2.8重载另外一个makefile (23)2.9make如何解析makefile文件 (24)2.9.1变量取值 (25)2.9.2条件语句 (25)2.9.3规则的定义 (25)2.10总结 (25)第三章:Makefile的规则 (26)3Makefile规则 (26)3.1一个例子 (27)3.2规则语法 (27)3.3依赖的类型 (28)3.4文件名使用通配符 (29)3.4.1统配符使用举例 (30)3.4.2通配符存在的缺陷 (30)3.4.3函数wildcard (31)3.5目录搜寻 (32)3.5.1一般搜索(变量VPATH) (32)3.5.2选择性搜索(关键字vpath) (32)3.5.3目录搜索的机制 (33)3.5.4命令行和搜索目录 (35)3.5.5隐含规则和搜索目录 (36)3.5.6库文件和搜索目录 (36)3.6Makefile伪目标 (37)3.7强制目标(没有命令或依赖的规则) (40)3.8空目标文件 (41)3.9Makefile的特殊目标 (41)3.10多目标 (44)3.11多规则目标 (44)3.12静态模式 (45)3.12.1静态模式规则的语法 (45)3.12.2静态模式和隐含规则 (47)3.13双冒号规则 (48)3.14自动产生依赖 (49)第四章:规则的命令 (51)4规则中书写命令 (51)4.1命令回显 (51)4.2命令的执行 (52)4.3并发执行命令 (53)4.4命令执行的错误 (54)4.5中断make的执行 (56)4.6make的递归执行 (56)4.6.1变量MAKE (57)4.6.2变量和递归 (58)4.6.3命令行选项和递归 (61)4.6.4-w选项 (63)4.7定义命令包 (63)4.8空命令 (65)第五章:Makefile中的变量 (65)5使用变量 (65)5.1变量的引用 (66)5.2两种变量定义(赋值) (68)5.2.1递归展开式变量 (68)5.2.2直接展开式变量 (69)5.2.3如何定义一个空格 (70)5.2.4“?=”操作符 (71)5.3变量的高级用法 (71)5.3.1变量的替换引用 (72)5.3.2变量的套嵌引用 (72)5.4变量取值 (76)5.5如何设置变量 (76)5.6追加变量值 (77)5.7override 指示符 (79)5.8多行定义 (80)5.9系统环境变量 (81)5.10目标指定变量 (83)5.11模式指定变量 (84)第六章:Makefile的条件执行 (85)6Makefile的条件判断 (85)6.1一个例子 (85)6.2条件判断的基本语法 (86)6.3标记测试的条件语句 (89)第七章:make的内嵌函数 (89)7make的函数 (89)7.1函数的调用语法 (90)7.2文本处理函数 (91)7.2.1$(subst FROM,TO,TEXT) (91)7.2.2$(patsubst PATTERN,REPLACEMENT,TEXT) (91)7.2.3$(strip STRINT) (92)7.2.4$(findstring FIND,IN) (92)7.2.5$(filter PATTERN...,TEXT). (93)7.2.6$(filter-out PATTERN...,TEXT). (93)7.2.7$(sort LIST) (94)7.2.8$(word N,TEXT) (94)7.2.9$(wordlist S,E,TEXT) (94)7.2.10$(words TEXT) (94)7.2.11$(firstword NAMES...). (95)7.3文件名处理函数 (95)7.3.1$(dir NAMES...) (95)7.3.2$(notdir NAMES...). (96)7.3.3$(suffix NAMES...). (96)7.3.4$(basename NAMES...).. (96)7.3.5$(addsuffix SUFFIX,NAMES...).. (97)7.3.6$(addprefix PREFIX,NAMES...).. (97)7.3.7$(join LIST1,LIST2) (98)7.3.8$(wildcard PATTERN) (98)7.4foreach 函数 (98)7.5if 函数 (100)7.6call函数 (100)7.7value函数 (102)7.8eval函数 (103)7.9origin函数 (104)7.10shell函数 (106)7.11make的控制函数 (106)7.11.1$(error TEXT...). (107)7.11.2$(warning TEXT...).. (107)第八章:执行make (108)8执行make (108)8.1指定makefile文件 (108)8.2指定终极目标 (109)8.3替代命令的执行 (111)8.4防止特定文件重建 (112)8.5替换变量定义 (113)8.6使用make进行编译测试 (114)8.7make的命令行选项 (115)第九章:make的隐含规则 (119)9使用隐含规则 (119)9.1隐含规则的使用 (119)9.2make的隐含规则一览 (121)9.3隐含变量 (124)9.3.1代表命令的变量 (124)9.3.2命令参数的变量 (125)9.4make隐含规则链 (126)9.5模式规则 (128)9.5.1模式规则介绍 (128)9.5.2模式规则示例 (129)9.5.3自动化变量 (130)9.5.4模式的匹配 (133)9.5.5万用规则 (133)9.5.6重建内嵌隐含规则 (134)9.6缺省规则 (135)9.7后缀规则 (135)9.8隐含规则搜索算法 (137)第十章:使用make更新静态库文件 (138)10更新静态库文件 (138)10.1库成员作为目标 (138)ARCHIVE(MEMBER) (138)10.2静态库的更新 (139)10.2.1更新静态库的符号索引表 (140)10.3make静态库的注意事项 (141)10.4静态库的后缀规则 (141)第十一章: GNU make的特点 (142)11GNU make的一些特点 (142)11.1源自System v的特点 (142)11.2源自其他版本的特点 (143)11.3GNU make自身的特点 (143)第十二章和其它版本的兼容 (144)12不兼容性 (144)第十三章 Makefile的约定 (146)13书写约定 (146)13.1基本的约定 (146)13.2规则命令行的约定 (147)13.3代表命令变量 (149)13.4安装目录变量 (150)13.5Makefile的标准目标名 (154)13.6安装命令分类 (159)第十四章 make的常见错误信息 (161)14 make产生的错误信息 (161)附录1:关键字索引 (163)GNU make可识别的指示符: (163)GNU make函数: (164)GNU make的自动化变量 (165)GNU make环境变量 (166)后序 (166)关于本书本文瑾献给所有热爱Linux的程序员!本文档版权所有,禁止用于任何商业行为。
隐含规则在我们使用Makefile时,有一些我们会经常使用,而且使用频率非常高的东西,比如,我们编译C/C++的源程序为中间目标文件(Unix下是[.o]文件,Windows下是[.obj]文件)。
本章讲述的就是一些在Makefile中的“隐含的”,早先约定了的,不需要我们再写出来的规则。
“隐含规则”也就是一种惯例,make会按照这种“惯例”心照不喧地来运行,那怕我们的Makefile中没有书写这样的规则。
例如,把[.c]文件编译成[.o]文件这一规则,你根本就不用写出来,make会自动推导出这种规则,并生成我们需要的[.o]文件。
“隐含规则”会使用一些我们系统变量,我们可以改变这些系统变量的值来定制隐含规则的运行时的参数。
如系统变量“CFLAGS”可以控制编译时的编译器参数。
我们还可以通过“模式规则”的方式写下自己的隐含规则。
用“后缀规则”来定义隐含规则会有许多的限制。
使用“模式规则”会更回得智能和清楚,但“后缀规则”可以用来保证我们Makefile的兼容性。
我们了解了“隐含规则”,可以让其为我们更好的服务,也会让我们知道一些“约定俗成”了的东西,而不至于使得我们在运行Makefile时出现一些我们觉得莫名其妙的东西。
当然,任何事物都是矛盾的,水能载舟,亦可覆舟,所以,有时候“隐含规则”也会给我们造成不小的麻烦。
只有了解了它,我们才能更好地使用它。
一、使用隐含规则如果要使用隐含规则生成你需要的目标,你所需要做的就是不要写出这个目标的规则。
那么,make会试图去自动推导产生这个目标的规则和命令,如果make可以自动推导生成这个目标的规则和命令,那么这个行为就是隐含规则的自动推导。
当然,隐含规则是make事先约定好的一些东西。
例如,我们有下面的一个Makefile:foo : foo.o bar.occ –o foo foo.o bar.o $(CFLAGS) $(LDFLAGS)我们可以注意到,这个Makefile中并没有写下如何生成foo.o和bar.o这两目标的规则和命令。
因为make的“隐含规则”功能会自动为我们自动去推导这两个目标的依赖目标和生成命令。
make会在自己的“隐含规则”库中寻找可以用的规则,如果找到,那么就会使用。
如果找不到,那么就会报错。
在上面的那个例子中,make调用的隐含规则是,把[.o]的目标的依赖文件置成[.c],并使用C的编译命令“cc –c $(CFLAGS) [.c]”来生成[.o]的目标。
也就是说,我们完全没有必要写下下面的两条规则:foo.o : foo.ccc –c foo.c $(CFLAGS)bar.o : bar.ccc –c bar.c $(CFLAGS)因为,这已经是“约定”好了的事了,make和我们约定好了用C编译器“cc”生成[.o]文件的规则,这就是隐含规则。
当然,如果我们为[.o]文件书写了自己的规则,那么make就不会自动推导并调用隐含规则,它会按照我们写好的规则忠实地执行。
还有,在make的“隐含规则库”中,每一条隐含规则都在库中有其顺序,越靠前的则是越被经常使用的,所以,这会导致我们有些时候即使我们显示地指定了目标依赖,make也不会管。
如下面这条规则(没有命令):foo.o : foo.p依赖文件“foo.p”(Pascal程序的源文件)有可能变得没有意义。
如果目录下存在了“foo.c”文件,那么我们的隐含规则一样会生效,并会通过“foo.c”调用C的编译器生成foo.o文件。
因为,在隐含规则中,Pascal的规则出现在C的规则之后,所以,make找到可以生成foo.o 的C的规则就不再寻找下一条规则了。
如果你确实不希望任何隐含规则推导,那么,你就不要只写出“依赖规则”,而不写命令。
二、隐含规则一览这里我们将讲述所有预先设置(也就是make内建)的隐含规则,如果我们不明确地写下规则,那么,make就会在这些规则中寻找所需要规则和命令。
当然,我们也可以使用make 的参数“-r”或“--no-builtin-rules”选项来取消所有的预设置的隐含规则。
当然,即使是我们指定了“-r”参数,某些隐含规则还是会生效,因为有许多的隐含规则都是使用了“后缀规则”来定义的,所以,只要隐含规则中有“后缀列表”(也就一系统定义在目标.SUFFIXES的依赖目标),那么隐含规则就会生效。
默认的后缀列表是:.out, .a, .ln, .o, .c, .cc, .C, .p, .f, .F, .r, .y, .l, .s, .S, .mod, .sym, .def, .h, .info, .dvi, .tex, .texinfo, .te xi, .txinfo, .w, .ch .web, .sh, .elc, .el。
具体的细节,我们会在后面讲述。
还是先来看一看常用的隐含规则吧。
1、编译C程序的隐含规则。
“<n>.o”的目标的依赖目标会自动推导为“<n>.c”,并且其生成命令是“$(CC) –c $(CPPFLAGS) $(CFLAGS)”2、编译C++程序的隐含规则。
“<n>.o”的目标的依赖目标会自动推导为“<n>.cc”或是“<n>.C”,并且其生成命令是“$(CXX) –c $(CPPFLAGS) $(CFLAGS)”。
(建议使用“.cc”作为C++源文件的后缀,而不是“.C”)3、编译Pascal程序的隐含规则。
“<n>.o”的目标的依赖目标会自动推导为“<n>.p”,并且其生成命令是“$(PC) –c $(PFLAGS)”。
4、编译Fortran/Ratfor程序的隐含规则。
“<n>.o”的目标的依赖目标会自动推导为“<n>.r”或“<n>.F”或“<n>.f”,并且其生成命令是:“.f” “$(FC) –c $(FFLAGS)”“.F” “$(FC) –c $(FFLAGS) $(CPPFLAGS)”“.f” “$(FC) –c $(FFLAGS) $(RFLAGS)”5、预处理Fortran/Ratfor程序的隐含规则。
“<n>.f”的目标的依赖目标会自动推导为“<n>.r”或“<n>.F”。
这个规则只是转换Ratfor 或有预处理的Fortran程序到一个标准的Fortran程序。
其使用的命令是:“.F” “$(FC) –F $(CPPFLAGS) $(FFLAGS)”“.r” “$(FC) –F $(FFLAGS) $(RFLAGS)”6、编译Modula-2程序的隐含规则。
“<n>.sym”的目标的依赖目标会自动推导为“<n>.def”,并且其生成命令是:“$(M2C) $(M2FLAGS) $(DEFFLAGS)”。
“<n.o>”的目标的依赖目标会自动推导为“<n>.mod”,并且其生成命令是:“$(M2C) $(M2FLAGS) $(MODFLAGS)”。
7、汇编和汇编预处理的隐含规则。
“<n>.o”的目标的依赖目标会自动推导为“<n>.s”,默认使用编译品“as”,并且其生成命令是:“$(AS) $(ASFLAGS)”。
“<n>.s”的目标的依赖目标会自动推导为“<n>.S”,默认使用C 预编译器“cpp”,并且其生成命令是:“$(AS) $(ASFLAGS)”。
8、链接Object文件的隐含规则。
“<n>”目标依赖于“<n>.o”,通过运行C的编译器来运行链接程序生成(一般是“ld”),其生成命令是:“$(CC) $(LDFLAGS) <n>.o $(LOADLIBES) $(LDLIBS)”。
这个规则对于只有一个源文件的工程有效,同时也对多个Object文件(由不同的源文件生成)的也有效。
例如如下规则:x : y.o z.o并且“x.c”、“y.c”和“z.c”都存在时,隐含规则将执行如下命令:cc -c x.c -o x.occ -c y.c -o y.occ -c z.c -o z.occ x.o y.o z.o -o xrm -f x.orm -f y.orm -f z.o如果没有一个源文件(如上例中的x.c)和你的目标名字(如上例中的x)相关联,那么,你最好写出自己的生成规则,不然,隐含规则会报错的。
9、Yacc C程序时的隐含规则。
“<n>.c”的依赖文件被自动推导为“n.y”(Yacc生成的文件),其生成命令是:“$(YACC) $(YFALGS)”。
(“Yacc”是一个语法分析器,关于其细节请查看相关资料)10、Lex C程序时的隐含规则。
(Lex生成的文件),其生成命令是:“$(LEX) $(LFALGS)”。
“<n>.c”的依赖文件被自动推导为“n.l”(关于“Lex”的细节请查看相关资料)11、Lex Ratfor程序时的隐含规则。
“<n>.r”的依赖文件被自动推导为“n.l”(Lex生成的文件),其生成命令是:“$(LEX) $(LFALGS)”。
12、从C程序、Yacc文件或Lex文件创建Lint库的隐含规则。
“<n>.ln”(lint生成的文件)的依赖文件被自动推导为“n.c”,其生成命令是:“$(LINT) $(LINTFALGS) $(CPPFLAGS) -i”。
对于“<n>.y”和“<n>.l”也是同样的规则。
三、隐含规则使用的变量在隐含规则中的命令中,基本上都是使用了一些预先设置的变量。
你可以在你的makefile 中改变这些变量的值,或是在make的命令行中传入这些值,或是在你的环境变量中设置这些值,无论怎么样,只要设置了这些特定的变量,那么其就会对隐含规则起作用。
当然,你也可以利用make的“-R”或“--no–builtin-variables”参数来取消你所定义的变量对隐含规则的作用。
例如,第一条隐含规则——编译C程序的隐含规则的命令是“$(CC) –c $(CFLAGS) $(CPPFLAGS)”。
Make默认的编译命令是“cc”,如果你把变量“$(CC)”重定义成“gcc”,把变量“$(CFLAGS)”重定义成“-g”,那么,隐含规则中的命令全部会以“gcc –c -g $(CPPFLAGS)”的样子来执行了。
我们可以把隐含规则中使用的变量分成两种:一种是命令相关的,如“CC”;一种是参数相的关,如“CFLAGS”。
下面是所有隐含规则中会用到的变量:1、关于命令的变量。