多模块软件的编译和链接.ppt_第1页
多模块软件的编译和链接.ppt_第2页
多模块软件的编译和链接.ppt_第3页
多模块软件的编译和链接.ppt_第4页
多模块软件的编译和链接.ppt_第5页
已阅读5页,还剩39页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

多模块软件的编译和链接,第7章,预习检查,$makef文件,是什么文件?遵循makefile语法的文件,也就是makefile文件目标列表:关联性列表,含义是什么?目标列表依赖于关联性列表简单变量的定义方式?变量名:=文本举一个make内置变量的例CFLAGS,$,$?等makeclean,clean常见的含义是什么?clean是虚目标,删除make生成的文件,2,本章目标,了解Make实用程序的功能使用makefile管理多模块软件掌握makefile的规则,变量掌握makefile的虚目标规则了解autoconf的原理和用法,本章结构,简介,多模块软件的编译和链接,Makefile和MakeRules,默认规则,虚目标,特殊目标,一般性语法错误及其纠正措施,autoconf,多模块软件、依赖树和make,Make实用程序,make实用程序对简单变量的支持,内建变量,命令行的使用和调试,1-1多模块软件,实用的软件都是拥有多个源文件这些源文件称之为模块多模块软件多模块软件,2-1make,一个差强人意的办法使用shell脚本上述的缺点,导致了make的产生。,$catbuild.scgcccprog1.cprog2.cprog3.cgccoprogprog1.oprog2.oprog3.o,2-1make,Make的产生,2-1make,管理多模块程序的编译和连接读取一个说明文件-makefile描述系统中各模块的依赖关系Make使重编译的次数达到最小化Makefile描述的依赖关系各组件文件的时间戳Makefile实质上是一种脚本语言,2-1Make,2-1make,2-1makefile,目标列表:关联性列表命令列表,目标列表:关联性列表;命令列表,也称为先决条件,2-1makefile,注释#连接符关联列表和命令列表中使用shell通配符?*,与shell脚本的相同,2-1makefile,实例,源码-power.c#includemain()floatx,y;printf(“theprogramtakexandfromstdinanddisplaysxy.n”);printf(“enternumberx:”);scanf(“%f”,$catMakefileSamplemakefileforthepowerprogramRemember:eachcommandlinestartswithaTABpower:power.cgccpower.c-opowerlm$,制表符,2-1makefile,当目标文件比关联文件更新更新关联文件,对比,$makemake:powerisuptodate,$touchpowerC$makegccpower.copowerlm,仅仅只更新文件的修改时间为当前时间,目标文件存在,且比关联文件更新,重新编译更新的关联文件,2-2依赖树,把power.c分成两个文件,#catpower.c#includedoublecompute(doublex,doubley);main()floatx,y;printf(”Theprogramtakesxfromstdinanddisplaysxy.n”);printf(”Enternumberx:”);scanf(”f,,$catmain.h/*Declarationofpromptstousers*/constchar*PROMPTl=”Enterthevalueofx:”constchar*PROMPT2=”Enterthevalueofy:”,$catinputC#include”inputh”doubleinput(constchar*s)floatx;printf(”s”,s);scanf(“f”,&x);return(x);,$catinput.h/*Declarationofthe”input”function*/doubleinput(char*);,catcomputeh/*Declarationofthe“compute”function*/doublecompute(double,double);,2-2依赖树,$catmainc#include#include”mainh”#include”computeh”#include”inputh”main()doublex,y;printf(”TheprogramtakesXandYfromstdinanddisplaysxy.n”);x=input(PROMPTl);y=input(PROMPT2);printf(”xyis:6.3fn”,compute(x,y);,2-2依赖树,$catmakefilepower:main.oinput.ocompute.ogccmain.oinput.ocompute.o-opower-1mmain.o:main.cmain.hinput.hcompute.hgcc-cmain.cinput.o:input.cinput.hgcc-cinput.ccompute.o:compute.ccomputehgcc-ccompute.c$,$makegcc-cmain.cgcc-cinput.cgcc-ccompute.cgccmain.oinput.ocompute.o-opower-1m,1.第一个先决条件不存在,或者先决条件作为目标文件的先决条件更新。生成第一个2.当所有的先决条件更新后,生成最终目标文件,2-3默认模式规则,-默认的后缀规则SUFFIXES:ocs.c.o:$(CC)$(CFLAGS)-c$.s.o:$(AS)$(ASFLAGS)-o$,-默认的模式规则(gnuMake)%.o:%.c:$(CC)$(CFLAGS)-c$%.o:%.s$(AS)$(ASFLAGS)-o$,-利用默认的规则修改后的makefile$catmakefilepower:main.oinput.ocompute.ogccmain.oinput.ocompute.o-opower-lmmain.o:main.hinput.hcompute.hinput.o:input.hcompute.o:compute.h,内置变量,以后会经常遇到,阶段总结,为什么使用make?Makefile的语法规则依赖树的分析默认的模式规则,2-4简单变量,简单变量定义:变量名:=文本添加:变量名+=文本引用$(变量名)$变量名$单字符变量,C=gcc$C,见过其他的模式吗?变量名=文本变量名?=文本超出了本章的返回,2-4简单变量,$catmakefileCC:=gccOPTIONS:=-O3OBJECTS:=main.oOBJECTS+=input.ocompute.oSOURCES:=main.cinputccompute.cHEADERS:=main.hinput.hcompute.hpower:$(OBJECTS)$(CC)$(OPTIONS)-opower$(OBJECTS)-lmmain.o:mainhinputhcomputehinput.o:inputhcompute.o:computehpower.tar:makefile$(HEADERS)$(SOURCES)tar-cvfpower.tarmakefile$(HEADERS)$(SOURCES)clean:rm*.o$,2-5内置变量,2-5修改后的makefile,complete:powerecho”Buildcomplete”power:$(OBJECTS)$(CC)$(OPTIONS)-O$-lmecho”Theexecutableisinthepowerfile”main.o:main.hinput.hcompute.hcompute.o:compute.hinput.o:input.hpower.tar:makefile$(HEADERS)$(SOURCES)tar-cvf$clean:rm-f*.ocorepower,虚目标,2-6虚目标,不存在的文件,而且也无需创建他们允许你强制执行某些事件,而这些事件在正常规则中是不会发生的规则虚目标和先决条件如果虚目标作为先决条件使用,它必须作为目标出现在某处虚目标总是使与之有关的命令被执行虚目标作为先决条件,总是是相应的目标重建,2-6虚目标,常见虚目标列表,2-6虚目标,$catmakefileINSTALLDIR=/home/sarwar/courses/bininstall:clientservercpf$(INSTALLDIR)rmf*.o$cd$(INSTALLDIR);chmod755$uninstall:cd$(INSTALLDIR);rmclientserverclient:client.omiscc.orcopyc.ogccclient.omiscc.orcopyc.olnsl-oclientclient.o:etc.hrcopy.hgcc-cclientc$makeinstall.,1.不存在的文件,仅为完成某些功能2.如果目录下存在这个同名文件会出现什么情况?,2-7特殊目标,上述问题用.PHONY的特殊目标解决.PHONY:cleanclean:rmrf*.o,2-7特殊目标,2-8一般性语法错误,Tab键在和换行符插入了空格,$makeMakefile:4:*missingseparator.Stop$cattMakefile$grepMakefile,$cateMakefile$grep$Makefile,2-9命令行的使用和调试,使用非标准的Makefile名称从标准输入读取显示所执行的顺序,$makefprog1.makefile,$make-f-,$make-n,3-1autoconf,创建安装shell脚本的工具configure一旦configure生成,无需autoconfAutoconf打包的软件./configuremakemakeinstall,3-1autoconf,Autoconf实际上是个工具集,3-1autoconf,确定条件编译$ifnames*.c*.h输出为条件定义的宏的列表,以及定义他们的文件创建configure.in文件$autoscan$moveconfigure.scanconfigure.in,3-1autoconf,编辑configure.in文件由m4宏指示字组成被autoconf解析,生成configure脚本创建makefile.in文件修改自己的makefile文件来包含autoconf产生的定义,任务的主要部分,3-1autoconf,创建config.h.in文件$autoheaderconfig.h文件的输入更新源文件所有的考虑移植的源文件,需要包含config.h,3-1autoconf,创建安装脚本$autconf复制autoconf脚本Autoconf的其他脚本config.guessConfig.subInstall-sh包含在目录/usr/lib/autoconf中,阶段总结,Makefile简单变量的定义Makefile的内置变量虚目标与常用虚目标Makefile常见的语法错误Autoconf打包软件的安装用autoconf打包软件,本章总结,简介,多模块软件的编译和链接,Makefile和MakeRules,默认规则,虚目标,特殊目标,一般性语法错误及其纠正措施,autoconf,多模块软件、依赖树和make,Make实用程序,make实用程序对简单变量的支持,内建变量,命令行的使用和调试,多模块软件编译的困境,分析make的原理,make程序的用法,以及Makefile的语法,规则,以及makefile对变量的支持,描述了虚目标,以及makefile的语法错误检查方法,描述了autoconf

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论