燕山大学 linux 课件5教案.ppt

  1. 1、本文档共40页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
静态链接库和动态链接库的创建和调用 6.3 程序维护工具make 6.3.1 make的工作机制 GNU的make的工作过程如下: ① 依次读入各makefile文件; ② 初始化文件中的变量; ③ 推导隐式规则,并分析所有规则; ④ 为所有的目标文件创建依赖关系链; ⑤ 根据依赖关系和时间数据,确定哪些目标文件要重新生成; ⑥ 执行相应的生成命令。 1.makefile文件 make被调用后会依次查找名为GNUmakefile,makefile和Makefile的描述文件 一个示例 : prog: x.o y.o z.o assmb.o gcc x.o y.o z.o assmb.o -L/home/mqc/lib -lm -o prog x.o:x.c defs.h gcc -c x.c y.o: y.c defs.h gcc -c y.c z.o:z.c gcc -c z.c assmb.o:assmb.s as -o assmb.o assmb.s clean: rm prog *.o Makefile规则有以下通用形式: 目标文件:[相依文件…] tab命令1[#注释] … tab命令n[#注释] 在格式上应注意: 依赖行从一行的开头开始书写 各命令行单独占一行,每个命令行的第一个字符必须是制表符tab,而不能使用8个空格 #号后的内容为注释 在依赖行上,目标文件和相依文件之间要用一个或两个冒号分开 2.依赖关系图 使用make的一个核心问题是确定好各文件之间的依赖关系。一般来说,生成一个目标文件可能有多个不同的途径,根据这些途径能够指定不同的依赖关系。 make是依据“关系图深度优先搜索”的算法来核查目标文件及相依文件的修改时间,深度相等时,可由左到右依次进行。 适当地引入中间结果,合理地构造依赖关系图,可以省去一部分编译工作量。但并非层次越多越好,要考虑目标文件的生成过程及其所起的作用。 6.3.2 使用变量 1.变量定义和引用 make的变量(又称做宏定义)一般均由大写字母和数字组成。 定义变量的一般格式是: 变量名=字符串 例如,下面都是合法的变量定义: OBJECT=x.o y.o z.o LIBES=-lm 引用make变量的方式与引用shell变量类似,即:把变量用圆括号括起来,并在前面加上“$”符号。例如: $(OBJECT) $(LIBES) 2.自动变量 除了用户定义的变量外,make也可以使用环境变量、自动变量和预定义变量。 make中定义了一些它们的值会因环境的不同而发生改变的变量,被称为自动变量。 例如: $@ 表示规则中的目标文件集合 $? 所有比目标文件还新的那些相依文件的集合,以空格分开 $ 规则中的第一个相依文件名 $^ 规则中所有相依文件的集合,以空格分开 $% 仅当目标文件是一个静态库成员时,表示规则中的目标成员 名,而此时$@表示相应库文件的名称 $* 如果目标文件的后缀是make所识别的,则$*就是去掉后缀的目标文件名,但该引用只有用在隐含规则中才有意义 3.预定义变量 归档库: AR ARFLAGS 汇编命令: AS ASFLAGS C编译命令: CC CPP CFLAGS CPPFLAGS C++编译命令: CXX CXXFLAGS 6.3.3 隐式规则 在makefile文件中显式地指定了一些规则,称为显式规则。 隐式规则就是一种惯例,即预先约定好了,不需要在makefile文件中写出来的规则。 几个常用的隐式规则: ① 编译C语言程序的隐式规则 ② 编译C++程序的隐式规则 ③ 汇编和汇编预处理的隐式规则 6.3.4 make命令常用选项 make命令有丰富的命令行选项。 例如: -C dir 把目录改到dir -d 输出所有的调试信息 -e 指明环境变量优先于makefile文件中的变量 -f file 使用file文件作为makefile文件 -I 忽略在

文档评论(0)

kehan123 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档