第七章 多模块软件的编译和链接.ppt

上传人:qwe****56 文档编号:70106308 上传时间:2023-01-16 格式:PPT 页数:37 大小:617KB
返回 下载 相关 举报
第七章 多模块软件的编译和链接.ppt_第1页
第1页 / 共37页
第七章 多模块软件的编译和链接.ppt_第2页
第2页 / 共37页
点击查看更多>>
资源描述

《第七章 多模块软件的编译和链接.ppt》由会员分享,可在线阅读,更多相关《第七章 多模块软件的编译和链接.ppt(37页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、多模块软件的编译和链接多模块软件的编译和链接第第7章章预习检查预习检查$make f 文件,是什么文件?文件,是什么文件?遵循遵循makefile语法的文件,也就是语法的文件,也就是makefile文件文件目标列表目标列表:关联性列表,含义是什么?关联性列表,含义是什么?目标列表依赖于关联性列表目标列表依赖于关联性列表简单变量的定义方式?简单变量的定义方式?变量名变量名:=文本文本举一个举一个make内置变量的例内置变量的例CFLAGS,$,$?等等make clean,clean常见的含义是什么?常见的含义是什么?clean是虚目标,删除是虚目标,删除make生成的文件生成的文件2本章目标本

2、章目标了解了解MakeMake实用程序的功能实用程序的功能使用使用makefilemakefile管理多模块软件管理多模块软件掌握掌握makefilemakefile的规则,变量的规则,变量掌握掌握makefilemakefile的虚目标规则的虚目标规则本章结构本章结构简介简介多模块软件的编译和链接多模块软件的编译和链接Makefile和和Make Rules默认规则默认规则虚目标虚目标特殊目标特殊目标一般性语法错误及其纠正措施一般性语法错误及其纠正措施多模块软件、依赖树和多模块软件、依赖树和makeMake实用程序实用程序make实用程序对简单变量的支持实用程序对简单变量的支持内建变量内建变

3、量命令行的使用和调试命令行的使用和调试1-1 多模块软件多模块软件实用的软件都是拥有多个源文件实用的软件都是拥有多个源文件这些源文件称之为模块这些源文件称之为模块多模块软件多模块软件多模块软件多模块软件优点优点缺点缺点较小的程序文件易于维护较小的程序文件易于维护知道所有文件的依赖性知道所有文件的依赖性只需编译经过修改的源文件,而只需编译经过修改的源文件,而不是编译整个系统不是编译整个系统跟踪所有文件修改的时间戳跟踪所有文件修改的时间戳支持信息隐藏支持信息隐藏必须键入很长的命令行必须键入很长的命令行2-1make 一个差强人意的办法一个差强人意的办法使用使用shell脚本脚本上述的缺点,导致了上

4、述的缺点,导致了make的产生。的产生。$cat build.scgcc c prog1.c prog2.c prog3.cgcc o prog prog1.o prog2.o prog3.o2-1makeMake的产生的产生Make Make 程序最初来源于程序最初来源于steve Johnsonsteve Johnson的一个拜访,那天的一个拜访,那天他风风火火的闯进我的办公室,诅咒命运之神让他浪费他风风火火的闯进我的办公室,诅咒命运之神让他浪费了一个早上来调试一个正确的程序了一个早上来调试一个正确的程序(bug(bug修改了,但是没修改了,但是没有编译,因此有编译,因此cc*.occ*.

5、o无效)。而我也花了前一个晚上的无效)。而我也花了前一个晚上的部分时间在我参与的项目中解决同样的灾难,这样编写部分时间在我参与的项目中解决同样的灾难,这样编写一个工具来解决这个问题的想法诞生了。最开始是精细一个工具来解决这个问题的想法诞生了。最开始是精细的依赖关系分析器,浓缩为更简单的东西后,周末就出的依赖关系分析器,浓缩为更简单的东西后,周末就出炉了炉了make.make.新兴工具的使用也是新兴工具的使用也是unixunix文化的一部分。文化的一部分。MakeMake文件都是文本的,不是神秘的二进制编码,因为就文件都是文本的,不是神秘的二进制编码,因为就是是unixunix的精神的精神:可打

6、印,可调试,可理解。可打印,可调试,可理解。-stuart Feldman-stuart Feldman2-1make管理多模块程序的编译和连接管理多模块程序的编译和连接读取一个说明文件读取一个说明文件-Makefile描述系统中各模块的依赖关系描述系统中各模块的依赖关系make使重编译的次数达到最小化使重编译的次数达到最小化Makefile描述的依赖关系描述的依赖关系各组件文件的时间戳各组件文件的时间戳Makefile 实质上是一种脚本语言实质上是一种脚本语言2-1Make语法语法make 选项选项 目标目标 宏定义宏定义 目的目的Make程序更新文件是基于存放在一个文件中的依赖程序更新文件

7、是基于存放在一个文件中的依赖关系,称为关系,称为Makefile。2-1makefile目标列表目标列表:关联性列表关联性列表命令列表命令列表目标列表目标列表:关联性列表关联性列表;命令列表命令列表也称为先决条件也称为先决条件2-1makefile注释注释#连接符连接符关联列表和命令列表中使用关联列表和命令列表中使用shell通配符通配符?*与与shell脚脚本的相同本的相同2-1makefile实例实例源码源码 power.c#include#include main()float x,y;printf(the program take x and from stdin and displa

8、ys xy.n);printf(enter number x:);scanf(%f,&x);printf(enter number y:);scanf(%f,&y);printf(xy is%6.3fn,pow(double)x,(double)y);$cat MakefileSample makefile for the power programRemember:each command line starts with a TABpower:power.cgcc power.c-o power lm$制表符制表符2-2依赖树依赖树把把power.c分成两个文件分成两个文件#include

9、 double compute(double x,double y);main()float x,y;printf(the program take x and from stdin and displays xy.n);printf(enter number x:);scanf(%f,&x);printf(enter number y:);scanf(%f,&y);printf(xy is%6.3fn,compute(x,y);#includedouble compute(double x,double y)return(pow(double)x,(double)y);2-2依赖树依赖树po

10、wer.ocompute.opower:power.o compute.ogcc power.o compute.o-o power-lm2-2依赖树依赖树power.ocompute.opower:power.o compute.ogcc power.o compute.o-o power-lmpower.o:power.cgcc c power.ccompute.o:compute.cgcc c compute.cpower.ccompute.c$makegcc-c power.cgcc-c compute.cgcc power.o compute.o-o power lm树中节点的处理是

11、树中节点的处理是自底向上的,由叶自底向上的,由叶结点的父节点开始结点的父节点开始2-2makefile当目标文件比关联文件更新当目标文件比关联文件更新更新关联文件,对比更新关联文件,对比$touch powerC$makegcc power.c o power lm仅仅只更新文仅仅只更新文件的修改时间件的修改时间为当前时间为当前时间目标文件存在,且目标文件存在,且比关联文件更新比关联文件更新重新编译更新重新编译更新的关联文件的关联文件2-2依赖树依赖树进一步分成六个文件,建立依赖树进一步分成六个文件,建立依赖树$cat computecincludeinclude”computeh”doubl

12、e compute(double x,double y)return(pow(double)x,(double)y);$cat main.h/*Declaration of prompts to users*/const char*PROMPTl=”Enter the value of x:”;const char*PROMPT2=”Enter the value of y:”;$cat inputC#include”inputh”double input(const char*s)floatx;printf(”s”,s);scanf(“f”,&x);return(x);$cat input.

13、h/*Declaration of the”input”function*/double input(char*);cat computeh/*Declaration of the“compute”function*/double compute(double,double);2-2依赖树依赖树$cat mainc#include#include”mainh”#include”computeh”#include”inputh”main()double x,y;printf(”The program takes X and Y from stdin and displays xy.n”);x=i

14、nput(PROMPTl);y=input(PROMPT2);printf(”xy is:6.3fn”,compute(x,y);2-2依赖树依赖树$cat mainc#include#include”mainh”#include”computeh”#include”inputh”main()double x,y;printf(”The program takes X and Y from stdin and displays xy.n”);x=input(PROMPTl);y=input(PROMPT2);printf(”xy is:6.3fn”,compute(x,y);2-2依赖树依赖树

15、$cat makefilepower:main.o input.o compute.o gcc main.o input.o compute.o-o power-1mmain.o:main.c main.h input.h compute.h gcc-c main.cinput.o:input.c input.h gcc-c input.ccompute.o:compute.c computeh gcc-c compute.c$makegcc-c main.cgcc-c input.cgcc-c compute.cgcc main.o input.o compute.o-o power-1m1

16、.第一个先决条件第一个先决条件不存在,或者先决不存在,或者先决条件作为目标文件条件作为目标文件的先决条件更新。的先决条件更新。生成第一个生成第一个2.当所有的先决条当所有的先决条件更新后,生成最件更新后,生成最终目标文件终目标文件2-3默认模式规则默认模式规则-默认的后缀规则默认的后缀规则SUFFIXES:.o.c.s.c.o:$(CC)$(CFLAGS)-c$.s.o:$(AS)$(ASFLAGS)-o$-默认的模式规则默认的模式规则(gnu Make)%.o:%.c:$(CC)$(CFLAGS)-c$%.o:%.s$(AS)$(ASFLAGS)-o$-利用默认的规则修改后的利用默认的规则修

17、改后的makefile$cat makefilepower:main.o input.o compute.ogcc main.o input.o compute.o-o power-lmmain.o:main.h input.h compute.hinput.o:input.hcompute.o:compute.h内置变量,以内置变量,以后会经常遇到后会经常遇到阶段总结阶段总结为什么使用为什么使用make?Makefile的语法规则的语法规则依赖树的分析依赖树的分析默认的模式规则默认的模式规则2-4简单变量简单变量简单变量简单变量定义定义:变量名变量名:=文本文本添加添加:变量名变量名+=文本

18、文本引用引用$(变量名变量名)$变量名变量名$单字符变量单字符变量C=gcc$C见过其他的模式吗?见过其他的模式吗?变量名变量名=文本文本变量名变量名?=文本文本超出了本章的范围超出了本章的范围2-4简单变量简单变量$cat makefileCC:=gccOPTIONS:=-O3OBJECTS:=main.o OBJECTS+=input.o compute.oSOURCES:=main.c inputc compute.cHEADERS:=main.h input.h compute.hpower:$(OBJECTS)$(CC)$(OPTIONS)-o power$(OBJECTS)-lmm

19、ain.o:mainh inputh computehinput.o:inputhcompute.o:computehpower.tar:makefile$(HEADERS)$(SOURCES)tar-cvf power.tar makefile$(HEADERS)$(SOURCES)clean:rm rf*.o$2-5 内置变量内置变量变量名变量名意义意义$当前目标的名称当前目标的名称$?比当前目标更新的已修改的依赖性列表比当前目标更新的已修改的依赖性列表$比当前目标更新的已修改的依赖性名称比当前目标更新的已修改的依赖性名称$用空格分开的所有依赖性列表用空格分开的所有依赖性列表2-5修改后的

20、修改后的makefilecomplete:powerecho”Build complete”power:$(OBJECTS)$(CC)$(OPTIONS)-O$-lmecho”The executable is in the power file”main.o:main.h input.h compute.hcompute.o:compute.hinput.o:input.hpower.tar:makefile$(HEADERS)$(SOURCES)tar-cvf$clean:rm-rf*.o core power虚目标虚目标2-6虚目标虚目标$cat makefileINSTALLDIR=/

21、home/sarwar/courses/bininstall:client servercp f$(INSTALLDIR)rm f*.o$cd$(INSTALLDIR);chmod 755$uninstall:cd$(INSTALLDIR);rm client server client:client.o miscc.o rcopyc.ogcc client.o miscc.o rcopyc.o lnsl-o client client.o:client.c netc.h rcopy.h gcc-c clientc$make install.不存在的文件,仅为完成某些功能不存在的文件,仅为完成

22、某些功能2-7特殊目标特殊目标上述问题用上述问题用.PHONY的特殊目标解决的特殊目标解决.PHONY:cleanclean:rm rf*.o2-7特殊目标特殊目标特殊目标特殊目标目的目的.DEFAULTS 如果如果make找不到生成目标的任何找不到生成目标的任何makefile入口或后缀规入口或后缀规则,它就执行与目标相关的命令则,它就执行与目标相关的命令.IGNORE如果某一行如果某一行makefile包含该目标,包含该目标,make忽略错误代码并忽略错误代码并继续建立,如果一个命令不正常存在,继续建立,如果一个命令不正常存在,make自然会停自然会停止。带有止。带有-i选项的选项的mak

23、e命令可以执行相同的任务命令可以执行相同的任务.PHONY允许您指定一个不是文件的目标,所以您能指示允许您指定一个不是文件的目标,所以您能指示make调调用一系列用一系列makefile中的命令,即使在您的当前目录中有中的命令,即使在您的当前目录中有一个具有目标名称的文件一个具有目标名称的文件.SILENTmake执行这些命令但不显示这些命令,带有执行这些命令但不显示这些命令,带有-s选项的选项的make可以执行相同的任务。如可以执行相同的任务。如7.2.5节所讨论的,在该命节所讨论的,在该命令前放置一个令前放置一个符号就可以执行一个特别命令符号就可以执行一个特别命令.SUFFIXES为目标指

24、定的前提为目标指定的前提(后缀后缀)可以与后缀规则相关联。如果与可以与后缀规则相关联。如果与目标没有相关联的前提,已存在目标没有相关联的前提,已存在 的后缀列表就会被删除的后缀列表就会被删除2-8一般性语法错误一般性语法错误Tab键键$makeMakefile:4:*missing separator.Stop$cat t Makefile$cat-e Makefile2-9命令行的使用和调试命令行的使用和调试使用非标准的使用非标准的Makefile名称名称显示所执行的顺序显示所执行的顺序$make f prog1.makefile$make-n本章总结本章总结简介简介多模块软件的编译和链接多

25、模块软件的编译和链接Makefile和和Make Rules默认规则默认规则虚目标虚目标特殊目标特殊目标一般性语法错误及其纠正措施一般性语法错误及其纠正措施多模块软件、依赖树和多模块软件、依赖树和makeMake实用程序实用程序make实用程序对简单变量的支持实用程序对简单变量的支持内建变量内建变量命令行的使用和调试命令行的使用和调试多模块软件多模块软件编译的困境编译的困境分析分析make的原理,的原理,make程序的程序的用法,以及用法,以及Makefile的语法,规的语法,规则,以及则,以及makefile对变量的支对变量的支持,描述了虚目标,以及持,描述了虚目标,以及makefile的语法错误检查方法的语法错误检查方法 实验实验任务任务1:为:为hello world 编写编写makefile任务任务1注意事项注意事项提示提示1:编写一个头文件,两个编写一个头文件,两个C文件文件main.c 是主程序是主程序hello.c编写打印编写打印”hello world”的函数的函数提示提示2:编写编写makefile,建立直接的依赖关系,建立直接的依赖关系使用默认规则使用默认规则定义变量定义变量CROSS_COMPILE:=CC:=(CROSS_COMPILE)gcc

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 技术资料 > 其他杂项

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁