已阅读5页,还剩39页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
多模块软件的编译和链接,第7章,预习检查,$make f 文件,是什么文件? 遵循makefile语法的文件,也就是makefile文件 目标列表: 关联性列表,含义是什么? 目标列表依赖于关联性列表 简单变量的定义方式? 变量名 := 文本 举一个make内置变量的例 CFLAGS, $,$?等 make clean,clean常见的含义是什么? clean是虚目标,删除make生成的文件,2,本章目标,了解Make实用程序的功能 使用makefile管理多模块软件 掌握makefile的规则,变量 掌握makefile的虚目标规则 了解autoconf的原理和用法,本章结构,简介,多模块软件的编译和链接,Makefile和Make Rules,默认规则,虚目标,特殊目标,一般性语法错误及其纠正措施,autoconf,多模块软件、依赖树和make,Make实用程序,make实用程序对简单变量的支持,内建变量,命令行的使用和调试,1-1 多模块软件,实用的软件都是拥有多个源文件 这些源文件称之为模块 多模块软件 多模块软件,2-1make,一个差强人意的办法 使用shell脚本 上述的缺点,导致了make的产生。,$cat build.sc gcc c prog1.c prog2.c prog3.c gcc o prog prog1.o prog2.o prog3.o,2-1make,Make的产生,2-1make,管理多模块程序的编译和连接 读取一个说明文件-makefile 描述系统中各模块的依赖关系 Make使重编译的次数达到最小化 Makefile描述的依赖关系 各组件文件的时间戳 Makefile 实质上是一种脚本语言,2-1Make,2-1make,2-1makefile,目标列表: 关联性列表 命令列表,目标列表: 关联性列表; 命令列表,也称为先决条件,2-1makefile,注释 # 连接符 关联列表和命令列表中使用shell通配符 ? * ,与shell脚本的相同,2-1makefile,实例,源码-power.c #include main() float x,y; printf(“the program take x and from stdin and displays xy.n”); printf(“enter number x:”); scanf(“%f”, ,$cat Makefile Sample makefile for the power program Remember:each command line starts with a TAB power:power.c gcc power.c -o power lm $,制表符,2-1makefile,当目标文件比关联文件更新 更新关联文件,对比,$make make:poweris up to date,$touch powerC $make gcc power.c o power lm,仅仅只更新文件的修改时间为当前时间,目标文件存在,且比关联文件更新,重新编译更新的关联文件,2-2依赖树,把power.c分成两个文件,#cat power.c #include double compute(double x,double y); main() float x,y; printf(”The program takes x from stdin and displays xy.n”); printf(”Enter number x:”); scanf(”f,&x); printf(”Enter number y:”); scanf(”f,&y); printf(”xy is:63fn”, compute(x,y); ,#cat compute.c #include double compute(double x,double y) return(pow(double)x,(double)y); ,2-2依赖树,power.o,compute.o,power:power.ocompute.o gcc power.o compute.o -o power-lm,2-2依赖树,power.o,compute.o,power:power.ocompute.o gcc power.o compute.o -o power-lm power.o:power.c gcc c power.c compute.o:compute.c gcc c compute.c,power.c,compute.c,$make gcc-c powerc gcc-c computec gee powero computeo-o powerlm,树中节点的处理是自底向上的,由叶结点的符节点开始,2-2依赖树,进一步分成六个文件,建立依赖树,$cat computec include include”computeh” double 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.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=input(PROMPTl); y=input(PROMPT2); printf(”xy is:6.3fn”,compute(x,y); ,2-2依赖树,$ cat makefile power:main.o input.o compute.o gcc main.o input.o compute.o -o power -1m main.o:main.c main.h input.h compute.h gcc -c main.c input.o:input.c input.h gcc -c input.c compute.o:compute.c computeh gcc -c compute.c $,$ make gcc-c main.c gcc-c input.c gcc -c compute.c gcc main.o input.o compute.o -o power -1m,1.第一个先决条件不存在,或者先决条件作为目标文件的先决条件更新。生成第一个 2.当所有的先决条件更新后,生成最终目标文件,2-3默认模式规则,-默认的后缀规则 SUFFIXES:ocs .c.o: $(CC)$(CFLAGS)-c $ .s.o: $(AS)$(ASFLAGS) -o $ $,-默认的模式规则(gnu Make) %.o:%.c: $(CC)$(CFLAGS)-c $ %.o:%.s $(AS)$(ASFLAGS) -o $ $,-利用默认的规则修改后的makefile $cat makefile power:main.o input.o compute.o gcc main.o input.o compute.o -o power -lm main.o:main.h input.h compute.h input.o:input.h compute.o:compute.h,内置变量,以后会经常遇到,阶段总结,为什么使用make? Makefile的语法规则 依赖树的分析 默认的模式规则,2-4简单变量,简单变量 定义: 变量名 :=文本 添加: 变量名 += 文本 引用 $(变量名) $变量名 $单字符变量,C=gcc $C,见过其他的模式吗? 变量名 = 文本 变量名 ?= 文本 超出了本章的返回,2-4简单变量,$cat makefile CC := gcc OPTIONS := -O3 OBJECTS := main.o OBJECTS += input.o compute.o SOURCES := main.c inputc compute.c HEADERS := main.h input.h compute.h power:$(OBJECTS) $(CC)$(OPTIONS) -o power $(OBJECTS) -lm main.o:mainh inputh computeh input.o:inputh compute.o:computeh power.tar:makefile $(HEADERS) $(SOURCES) tar -cvf power.tar makefile $(HEADERS) $(SOURCES) clean: rm *.o $,2-5 内置变量,2-5修改后的makefile,complete:power echo”Build complete” power:$(OBJECTS) $(CC)$(OPTIONS)-O $ $ -lm echo”The executable is in the power file” main.o:main.h input.h compute.h compute.o:compute.h input.o:input.h power.tar:makefile $(HEADERS) $(SOURCES) tar -cvf $ $ clean: rm-f *.o core power,虚目标,2-6虚目标,不存在的文件,而且也无需创建他们 允许你强制执行某些事件,而这些事件在正常规则中是不会发生的 规则虚目标和先决条件 如果虚目标作为先决条件使用,它必须作为目标出现在某处 虚目标总是使与之有关的命令被执行 虚目标作为先决条件,总是是相应的目标重建,2-6虚目标,常见虚目标列表,2-6虚目标,$cat makefile INSTALLDIR=/home/sarwar/courses/bin install:client server cp f $ $(INSTALLDIR) rm f *.o $ cd $(INSTALLDIR);chmod 755 $ uninstall: cd $(INSTALLDIR);rm client server client:client.o miscc.o rcopyc.o gcc client.o miscc.o rcopyc.o lnsl -o client client.o:client.c netc.h rcopy.h gcc -c clientc $make install . . . . . . .,1.不存在的文件,仅为完成某些功能 2.如果目录下存在这个同名文件会出现什么情况?,2-7特殊目标,上述问题用.PHONY的特殊目标解决 .PHONY:clean clean: rm rf *.o,2-7特殊目标,2-8一般性语法错误,Tab键 在和换行符插入了空格,$make Makefile:4:*missing separator.Stop $cat t Makefile $grep Makefile,$ cat e Makefile $grep $ Makefile,2-9命令行的使用和调试,使用非标准的Makefile名称 从标准输入读取 显示所执行的顺序,$ make f prog1.makefile,$make -f-,$make -n,3-1autoconf,创建安装shell脚本的工具 configure 一旦configure生成,无需autoconf Autoconf打包的软件 ./configure make make install,3-1autoconf,Autoconf 实际上是个工具集,3-1autoconf,确定条件编译 $ifnames *.c *.h 输出为条件定义的宏的列表,以及定义他们的文件 创建configure.in文件 $autoscan $move configure.scan configure.in,3-1autoconf,编辑configure.in文件 由m4宏指示字组成 被autoconf解析,生成configure脚本 创建makefile.in文件 修改自己的makefile文件来包含autoconf产生的定义,任务的主要部分,3-1autoconf,创建config.h.in文件 $autoheader config.h文件的输入 更新源文件 所有的考虑移植的源文件,需要包含config.h,3-1autoconf,创建安装脚本 $autconf 复制autoconf脚本 Autoconf 的其他脚本 config.guess Config.sub In
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 石河子大学《影像诊断学》2023-2024学年第一学期期末试卷
- 石河子大学《数据库管理》2021-2022学年期末试卷
- 石河子大学《景观生态学原理》2022-2023学年第一学期期末试卷
- 沈阳理工大学《数据库原理》2023-2024学年期末试卷
- 沈阳理工大学《化工原理A》2021-2022学年第一学期期末试卷
- 沈阳理工大学《电路实验》2021-2022学年期末试卷
- 沈阳理工大学《产品语义学应用设计》2021-2022学年第一学期期末试卷
- 沈阳理工大学《nux系统程序设计》2023-2024学年期末试卷
- 合伙承包高钙粉合同
- 同步新课堂高中历史专题二近代中国维护国家主权的斗争课时训练7伟大的抗日战争含解析人民版必修1
- 不锈钢方管尺寸及理论重量重量表
- 【公开课课件】高中英语读后续写(整合)
- 民用建筑能效测评机构条件
- 网球教练求职简历模板免费下载
- 个人喜好调查问卷
- 引发剂I分解(课堂PPT)
- 机电工程预留预埋质量检查表
- 设备对中技术PPT课件
- 分析工具(世纪大桥标准答案)
- 监理取费标准670号文
- 第2章推销自己PPT课件
评论
0/150
提交评论