Linux基础之多模块编译和链接ppt课件.pptx

上传人:小飞机 文档编号:2076115 上传时间:2023-01-07 格式:PPTX 页数:47 大小:279.63KB
返回 下载 相关 举报
Linux基础之多模块编译和链接ppt课件.pptx_第1页
第1页 / 共47页
Linux基础之多模块编译和链接ppt课件.pptx_第2页
第2页 / 共47页
Linux基础之多模块编译和链接ppt课件.pptx_第3页
第3页 / 共47页
Linux基础之多模块编译和链接ppt课件.pptx_第4页
第4页 / 共47页
Linux基础之多模块编译和链接ppt课件.pptx_第5页
第5页 / 共47页
点击查看更多>>
资源描述

《Linux基础之多模块编译和链接ppt课件.pptx》由会员分享,可在线阅读,更多相关《Linux基础之多模块编译和链接ppt课件.pptx(47页珍藏版)》请在三一办公上搜索。

1、讲师:杨行,系列课程Linux基础,多模块编译和链接,第七章,课程目标,具备搭建linux系统平台能力系统安装具备Linux系统日常维护能力文件,目录结构linux的常用命令,ViShell脚本编程、管道及其重定向tftp,nfs服务器的配置熟悉Linux系统下的开发环境Gcc,Gdb,课程安排,第一天 上午:Linux系统简介和安装 下午:Linux安装实际演练第二天 上午:Linux基本操作命令 下午:Linux基本操作命令实战第三天 上午:Linux进程操作 下午:Linux服务器配置第四天 上午:Linux脚本编程 上 下午:Linux脚本编程下第五天 上午:源代码编译和调试 下午:多

2、模块软件的编译和链接(预科内容,根据实际情况调整授课天数,4-10天),课前提问,Make f文件,是什么文件?目标类表:关联性列表含义是什么?如何定义简单变量?举一个make内置变量的例子,本章目标,Make实用程序的功能使用makefile管理多模块软件makefile的规则,变量makefile的虚目标规则Makefile常见错误和调试,实用的软件都是拥有多个源文件这些源文件称之为模块多模块软件多模块软件,知识点1-Make,一个差强人意的办法使用shell脚本上述的缺点,导致了make的产生。,$cat build.scgcc c prog1.c prog2.c prog3.cgcc

3、o prog prog1.o prog2.o prog3.o,Make,工程管理器,顾名思义,是指管理较多的文件 Make工程管理器也就是个“自动编译管理器”,这里的“自动”是指它能构根据文件时间戳自动发现更新过的文件而减少编译的工作量,同时,它通过读入Makefile文件文件的内容来执行大量的编译工作 Make将只编译改动的代码文件,而不用完全编译。,Make,管理多模块程序的编译和连接读取一个说明文件-Makefile描述系统中各模块的依赖关系make使重编译的次数达到最小化Makefile描述的依赖关系各组件文件的时间戳Makefile 实质上是一种脚本语言,Make,Make,Make

4、,知识点2Makefile文件,Makefile是Make读入的唯一配置文件 由make工具创建的目标体(target),通常是目标文件或可执行文件要创建的目标体所依赖的文件(dependency_file)创建每个目标体时需要运行的命令(command)注意:命令行前面必须是一个”TAB键”,否则编译错误为:*missing separator.Stop.,目标列表:关联性列表命令列表,目标列表:关联性列表;命令列表,也称为先决条件,Makefile文件,Makefile格式1target:dependency_filescommand例子hello.o:hello.c hello.hgcc

5、 c hello.c o hello.o,Makefile格式2target:dependency_files;command例子hello.o:hello.c hello.h;gcc c hello.c o hello.o,注释#连接符关联列表和命令列表中使用shell通配符?*,与shell脚本的相同,Makefile文件,实例,源码 power.c#include#include Void main()float x,y;printf(the program take x and from stdin and displays xy.n);printf(enter number x:);

6、scanf(%f,$cat MakefileSample makefile for the power programRemember:each command line starts with a TABpower:power.cgcc power.c-o power lm$,制表符,Makefile文件,把power.c分成两个文件,#include double compute(double x,double y);main()float x,y;printf(the program take x and from stdin and displays xy.n);printf(ente

7、r number x:);scanf(%f,#includedouble compute(double x,double y)return(pow(double)x,(double)y);,Makefile文件,power.o,compute.o,power:power.o compute.ogcc power.o compute.o-o power-lm,Makefile文件-依赖树,power.o,compute.o,power:power.o compute.ogcc power.o compute.o-o power-lmpower.o:power.cgcc c power.ccomp

8、ute.o:compute.cgcc c compute.c,power.c,compute.c,$makegcc-c power.cgcc-c compute.cgcc power.o compute.o-o power lm,树中节点的处理是自底向上的,由叶结点的父节点开始,Makefile文件-依赖树,当目标文件比关联文件更新更新关联文件,对比,$makemake:poweris up to date,$touch powerC$makegcc power.c o power lm,仅仅只更新文件的修改时间为当前时间,目标文件存在,且比关联文件更新,重新编译更新的关联文件,Makefil

9、e文件,进一步分成六个文件,建立依赖树,$cat computecincludeinclude”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

10、 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);,Makefile文件-依赖树,$cat mainc#include#include”mainh”#include”computeh”#include”inputh”main()double

11、 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);,Makefile文件-依赖树,$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:inpu

12、t.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-1m,1.第一个先决条件不存在,或者先决条件作为目标文件的先决条件更新。生成第一个2.当所有的先决条件更新后,生成最终目标文件,Makefile文件-依赖树,-默认的后缀规则SUFFIXES:.o.c.s.c.o:$(CC)$(CFLAGS)-c$.s.o:$(AS)$(ASFLAGS)-o$

13、,-默认的模式规则(gnu Make)%.o:%.c:$(CC)$(CFLAGS)-c$%.o:%.s$(AS)$(ASFLAGS)-o$,-利用默认的规则修改后的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,内置变量,以后会经常遇到,知识点3-Makefile的规则和变量,Makefile的规则和变量,一个复杂一些的例子sunq:

14、kang.o yul.ogcc kang.o bar.o-o myprogkang.o:kang.c kang.h head.hgcc Wall O-g c kang.c-o kang.oyul.o:bar.c head.hgcc-Wall O-g c yul.c-o yul.o注释:-Wall:表示允许发出gcc所有有用的报警信息.-c:只是编译不链接,生成目标文件”.so”-o file:表示把输出文件输出到file里,Makefile的规则和变量,创建变量的目的:用来代替一个文本字符串:1.系列文件的名字 2.传递给编译器的参数 3.需要运行的程序 4.需要查找源代码的目录 5.你需要输

15、出信息的目录 6.你想做的其它事情。,简单变量定义:变量名:=文本添加:变量名+=文本引用$(变量名)$变量名$单字符变量,C=gcc$C,Makefile的规则和变量,变量定义的两种方式递归展开方式VAR=var简单方式 VAR:=var变量使用$(VAR)用”$”则用”$”来表示,刚才的例子OBJS=kang.o yul.oCC=gccCFLAGS=-Wall-O-gsunq:$(OBJS)$(CC)$(OBJS)-o sunqkang.o:kang.c kang.h$(CC)$(CFLAGS)-c kang.c-o kang.oyul.o:yul.c yul.h$(CC)$(CFLAGS

16、)-c yul.c-o yul.o,Makefile的规则和变量,$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)-lmmain.o:mainh inputh computehinput.o:inputhcompute.o:computehpower.tar:makefi

17、le$(HEADERS)$(SOURCES)tar-cvf power.tar makefile$(HEADERS)$(SOURCES)clean:rm rf*.o$,Makefile的规则和变量-简单变量实例,Makefile的规则和变量-内置变量,complete: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:inpu

18、t.hpower.tar:makefile$(HEADERS)$(SOURCES)tar-cvf$clean:rm-rf*.o core power,虚目标,Makefile的规则和变量,Make进行处理的依据包括目标体、依赖文件及其之间的命令语句 隐式规则模式规则,Makefile的规则和变量,隐式规则隐含规则能够告诉make怎样使用传统的技术完成任务,这样,当用户使用它们时就不必详细指定编译的具体细节,而只需把目标文件列出即可 例子OBJS=kang.o yul.oCC=gccCFLAGS=-Wall-O-gsunq:$(OBJS)$(CC)$-o$,Makefile的规则和变量,AR 归

19、档维护程序的名称,默认值为 ar。ARFLAGS 归档维护程序的选项。AS 汇编程序的名称,默认值为 as。ASFLAGS 汇编程序的选项。CC C 编译器的名称,默认值为 cc。CFLAGS C 编译器的选项。CPP C 预编译器的名称,默认值为$(CC)-E。CPPFLAGS C 预编译的选项。CXX C+编译器的名称,默认值为 g+。CXXFLAGS C+编译器的选项。FC FORTRAN 编译器的名称,默认值为 f77。FFLAGS FORTRAN 编译器的选项。,Makefile的规则和变量,常见隐式规则目录C编译:.c变为.o$(CC)c$(CPPFLAGS)$(CFLAGS)C+

20、编译:.cc或.C变为.o$(CXX)-c$(CPPFLAGS)$(CXXFLAGS)Pascal编译:.p变为.o$(PC)-c$(PFLAGS)Fortran编译:.r变为-o$(FC)-c$(FFLAGS)。,Makefile的规则和变量,模式规则 模式规则是用来定义相同处理规则的多个文件的。它不同于隐式规则,隐式规则仅仅能够用make默认的变量来进行操作,而模式规则还能引入用户自定义变量,为多个文件建立相同的规则,从而简化了Makefile的编写 模式规则的格式类似于普通规则,这个规则中的相关文件前必须用“%”标明,Makefile的规则和变量,模式规则下OBJS=kang.o yul

21、.oCC=gccCFLAGS=-Wall-O-gsunq:$(OBJS)$(CC)$-o$%.o:%.c$(CC)$(CFLAGS)-c$-o$,Makefile的规则和变量,例子2(main.c main.h),OBJ=main.ohello:$(OBJ)$(CC)$-o$%.o:%c$(CC)-c$-o$clean:$(RM)hello,Makefile的规则和变量,不存在的文件,而且也无需创建他们允许你强制执行某些事件,而这些事件在正常规则中是不会发生的规则虚目标和先决条件如果虚目标作为先决条件使用,它必须作为目标出现在某处虚目标总是使与之有关的命令被执行虚目标作为先决条件,总是相应的目

22、标重建,知识点4-Makefile的虚目标,常见虚目标列表,Makefile的虚目标,$cat makefileINSTALLDIR=/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

23、netc.h rcopy.h gcc-c clientc$make install.,不存在的文件,仅为完成某些功能,Makefile的虚目标,上述问题用.PHONY的特殊目标解决.PHONY:cleanclean:rm rf*.o,Makefile的特殊目标,Makefile的特殊目标,Tab键-常见错误漏掉Tab,$makeMakefile:4:*missing separator.Stop$cat t Makefile$cat-e Makefile,知识点5-Makefile使用和调试,使用非标准的Makefile名称显示所执行的顺序,$make f prog1.makefile,$ma

24、ke-n,Makefile使用和调试,任务1:为hello world 编写makefile,注意事项提示1:编写一个头文件,两个C文件main.c 是主程序hello.c编写打印”hello world”的函数提示2:编写makefile,建立直接的依赖关系使用默认规则定义变量CROSS_COMPILE:=CC:=(CROSS_COMPILE)gcc,Makefile练习,任务:为hello world 编写makefile,课程总结,本节课程内容Make实用程序的功能使用makefile管理多模块软件makefile的规则,变量makefile的虚目标规则Makefile文件调试下节课程C语言基础,

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号