《Linux基础之多模块编译和链接ppt课件.pptx》由会员分享,可在线阅读,更多相关《Linux基础之多模块编译和链接ppt课件.pptx(47页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、上嵌网院 在整堂课的教学中,刘教师总是让学生带着问题来学习,而问题的设置具有一定的梯度,由浅入深,所提出的问题也很明确讲师:杨行系列课程Linux基础多模块编译和链接第七章第七章上嵌网院 在整堂课的教学中,刘教师总是让学生带着问题来学习,而问题的设置具有一定的梯度,由浅入深,所提出的问题也很明确课程目标具备搭建具备搭建linux系统平台能力系统平台能力系统安装具备具备Linux系统日常维护能力系统日常维护能力文件,目录结构linux的常用命令,ViShell脚本编程、管道及其重定向tftp,nfs服务器的配置熟悉熟悉Linux系统下的开发环境系统下的开发环境Gcc,Gdb上嵌网院 在整堂课的教
2、学中,刘教师总是让学生带着问题来学习,而问题的设置具有一定的梯度,由浅入深,所提出的问题也很明确课程安排第一天第一天 上午:上午:LinuxLinux系统简介和安装系统简介和安装 下午:下午:LinuxLinux安装实际演练安装实际演练第二天第二天 上午:上午:LinuxLinux基本操作命令基本操作命令 下午:下午:LinuxLinux基本操作命令实战基本操作命令实战第三天第三天 上午:上午:Linux Linux进程操作进程操作 下午:下午:LinuxLinux服务器配置服务器配置第四天第四天 上午:上午:LinuxLinux脚本编程脚本编程 上上 下午:下午:LinuxLinux脚本编程
3、下脚本编程下第五天第五天 上午:源代码编译和调试上午:源代码编译和调试 下午:下午:多模块软件的编译和链接多模块软件的编译和链接(预科内容,根据实际情况调整授课天数,(预科内容,根据实际情况调整授课天数,4-104-10天)天)上嵌网院 在整堂课的教学中,刘教师总是让学生带着问题来学习,而问题的设置具有一定的梯度,由浅入深,所提出的问题也很明确课前提问Make fMake f文件,是什么文件文件,是什么文件?目标类表:关联性列表含义是什么?目标类表:关联性列表含义是什么?如何定义简单变量?如何定义简单变量?举一举一个个makemake内置变量的例子内置变量的例子上嵌网院 在整堂课的教学中,刘教
4、师总是让学生带着问题来学习,而问题的设置具有一定的梯度,由浅入深,所提出的问题也很明确本章目标Make实用程序的功能使用makefile管理多模块软件makefile的规则,变量makefile的虚目标规则Makefile常见错误和调试上嵌网院 在整堂课的教学中,刘教师总是让学生带着问题来学习,而问题的设置具有一定的梯度,由浅入深,所提出的问题也很明确实用的软件都是拥有多个源文件这些源文件称之为模块多模块软件多模块软件优点优点缺点缺点较小的程序文件易于维护知道所有文件的依赖性只需编译经过修改的源文件,而不是编译整个系统跟踪所有文件修改的时间戳支持信息隐藏必须键入很长的命令行知识点1-Make上
5、嵌网院 在整堂课的教学中,刘教师总是让学生带着问题来学习,而问题的设置具有一定的梯度,由浅入深,所提出的问题也很明确一个差强人意的办法使用shell脚本上述的缺点,导致了make的产生。$cat build.scgcc c prog1.c prog2.c prog3.cgcc o prog prog1.o prog2.o prog3.oMake上嵌网院 在整堂课的教学中,刘教师总是让学生带着问题来学习,而问题的设置具有一定的梯度,由浅入深,所提出的问题也很明确工程管理器,顾名思义,是指管理较多的文件 Make工程管理器也就是个“自动编译管理器”,这里的“自动”是指它能构根据文件时间戳自动发现更
6、新过的文件而减少编译的工作量,同时,它通过读入Makefile文件文件的内容来执行大量的编译工作 MakeMake将只编译改动的代码文件,而不用完全将只编译改动的代码文件,而不用完全将只编译改动的代码文件,而不用完全将只编译改动的代码文件,而不用完全编译。编译。编译。编译。Make上嵌网院 在整堂课的教学中,刘教师总是让学生带着问题来学习,而问题的设置具有一定的梯度,由浅入深,所提出的问题也很明确管理多模块程序的编译和连接读取一个说明文件-Makefile描述系统中各模块的依赖关系make使重编译的次数达到最小化Makefile描述的依赖关系各组件文件的时间戳Makefile 实质上是一种脚本
7、语言Make上嵌网院 在整堂课的教学中,刘教师总是让学生带着问题来学习,而问题的设置具有一定的梯度,由浅入深,所提出的问题也很明确语法语法make make 选项选项 目标目标 宏定义宏定义 目的Make程序更新文件是基于存放在一个文件中的依赖关系,称为Makefile。Make上嵌网院 在整堂课的教学中,刘教师总是让学生带着问题来学习,而问题的设置具有一定的梯度,由浅入深,所提出的问题也很明确常用选项常用选项特性特性-d显示调试信息-f 指定从哪个文件中读取依赖关系信息。默认文件是”Makefile”或“makefile”“-”表示从标准输入-h显示所有选项的简要说明-n不运行任何Makef
8、ile命令,只显示他们-s安静的方式运行,不显示任何信息Make上嵌网院 在整堂课的教学中,刘教师总是让学生带着问题来学习,而问题的设置具有一定的梯度,由浅入深,所提出的问题也很明确知识点2Makefile文件Makefile是Make读入的唯一配置文件 由make工具创建的目标体(target),通常是目标文件或可执行文件要创建的目标体所依赖的文件(dependency_file)创建每个目标体时需要运行的命令(command)注意注意:命令行前面必须是一个”TAB键”,否则编译错误为:*missing separator.Stop.上嵌网院 在整堂课的教学中,刘教师总是让学生带着问题来学习
9、,而问题的设置具有一定的梯度,由浅入深,所提出的问题也很明确目标列表目标列表:关联性列表关联性列表命令列表命令列表目标列表目标列表:关联性列表关联性列表;命令列表命令列表也称为先决条件Makefile文件Makefile格式1target:dependency_filescommand例子hello.o:hello.c hello.hhello.o:hello.c hello.hgcc c hello.c o hello.ogcc c hello.c o hello.oMakefile格式2target:dependency_files;command例子hello.o:hello.c hel
10、lo.h;gcc c hello.c hello.o:hello.c hello.h;gcc c hello.c o hello.oo hello.o上嵌网院 在整堂课的教学中,刘教师总是让学生带着问题来学习,而问题的设置具有一定的梯度,由浅入深,所提出的问题也很明确注释#连接符关联列表和命令列表中使用shell通配符?*与shell脚本的相同Makefile文件上嵌网院 在整堂课的教学中,刘教师总是让学生带着问题来学习,而问题的设置具有一定的梯度,由浅入深,所提出的问题也很明确实例源码源码 power.c#include#include Void main()float x,y;printf
11、(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,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
12、$制表符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(enter number x:);scanf(%f,&x);printf(enter number y:);scanf(%f,&y);printf(xy is%6.3fn,c
13、ompute(x,y);#includedouble compute(double x,double y)return(pow(double)x,(double)y);Makefile文件上嵌网院 在整堂课的教学中,刘教师总是让学生带着问题来学习,而问题的设置具有一定的梯度,由浅入深,所提出的问题也很明确power.opower.ocompute.ocompute.opowerpower:power.o compute.opower.o compute.ogcc power.o compute.o-o power-lmgcc power.o compute.o-o power-lmMakefi
14、le文件-依赖树上嵌网院 在整堂课的教学中,刘教师总是让学生带着问题来学习,而问题的设置具有一定的梯度,由浅入深,所提出的问题也很明确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树中节点的处理是自底向上的,由叶结点的
15、父节点开始Makefile文件-依赖树上嵌网院 在整堂课的教学中,刘教师总是让学生带着问题来学习,而问题的设置具有一定的梯度,由浅入深,所提出的问题也很明确当目标文件比关联文件更新更新关联文件,对比$makemake:poweris up to date$touch powerC$makegcc power.c o power lm仅仅只更新文件的修改时间为当前时间目标文件存在,且比关联文件更新重新编译更新的关联文件Makefile文件上嵌网院 在整堂课的教学中,刘教师总是让学生带着问题来学习,而问题的设置具有一定的梯度,由浅入深,所提出的问题也很明确进一步分成六个文件,建立依赖树$cat c
16、omputecincludeinclude”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)
17、;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”#
18、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);Makefile文件-依赖树上嵌网院 在整堂课的教学中,刘教师总是让学生带着问题来学习,而问题的设置具有一定的梯度,由浅入深,所提出的问题也很明确$cat makefilepower:main.o input.o compute.o gcc main.o input.o
19、 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$make$makegcc-c main.cgcc-c main.cgcc-c input.cgcc-c input.cgcc-c compute.cgcc-c compute.cgcc main.o input.o compute.o-o gcc main.o input.o compute
20、.o-o power-1mpower-1m1.1.第一个先决条件第一个先决条件不存在,或者先决不存在,或者先决条件作为目标文件条件作为目标文件的先决条件更新。的先决条件更新。生成第一个生成第一个2.2.当所有的先决条当所有的先决条件更新后,生成最件更新后,生成最终目标文件终目标文件Makefile文件-依赖树上嵌网院 在整堂课的教学中,刘教师总是让学生带着问题来学习,而问题的设置具有一定的梯度,由浅入深,所提出的问题也很明确-默认的后缀规则默认的后缀规则SUFFIXES:.o.c.sSUFFIXES:.o.c.s.c.o.c.o:$(CC)$(CFLAGS)-c$(CC)$(CFLAGS)-c
21、$.s.o.s.o:$(AS)$(ASFLAGS)-o$(AS)$(ASFLAGS)-o$-默认的模式规则默认的模式规则(gnu Make)(gnu Make)%.o:%.c:%.o:%.c:$(CC)$(CFLAGS)-c$(CC)$(CFLAGS)-c$%.o:%.s%.o:%.s$(AS)$(ASFLAGS)-o$(AS)$(ASFLAGS)-o$-利用默认的规则修改后的利用默认的规则修改后的makefilemakefile$cat makefile$cat makefilepowerpower:main.o input.o compute.omain.o input.o compute
22、.ogcc main.o input.o compute.o-o power-lmgcc main.o input.o compute.o-o power-lmmain.omain.o:main.h input.h compute.hmain.h input.h compute.hinput.oinput.o:input.hinput.hcompute.ocompute.o:compute.hcompute.h内置变量,以内置变量,以后会经常遇到后会经常遇到知识点3-Makefile的规则和变量上嵌网院 在整堂课的教学中,刘教师总是让学生带着问题来学习,而问题的设置具有一定的梯度,由浅入深,所
23、提出的问题也很明确Makefile的规则和变量一个复杂一些的例子sunq:kang.o yul.osunq:kang.o yul.ogcc kang.o bar.o-o myproggcc kang.o bar.o-o myprogkang.o:kang.c kang.h head.hkang.o:kang.c kang.h head.hgcc Wall O-g c kang.c-o kang.ogcc Wall O-g c kang.c-o kang.oyul.o:bar.c head.hyul.o:bar.c head.hgcc-Wall O-g c yul.c-o yul.ogcc-Wa
24、ll O-g c yul.c-o yul.o注释注释:-Wall:-Wall:表示允许发出表示允许发出gccgcc所有有用的报警信息所有有用的报警信息.-c:-c:只是编译不链接只是编译不链接,生成目标文件生成目标文件”.so”.so”-o file:-o file:表示把输出文件输出到表示把输出文件输出到filefile里里上嵌网院 在整堂课的教学中,刘教师总是让学生带着问题来学习,而问题的设置具有一定的梯度,由浅入深,所提出的问题也很明确Makefile的规则和变量创建变量的目的:用来代替一个文本字符串:1.系列文件的名字 2.传递给编译器的参数 3.需要运行的程序 4.需要查找源代码的目
25、录 5.你需要输出信息的目录 6.你想做的其它事情。上嵌网院 在整堂课的教学中,刘教师总是让学生带着问题来学习,而问题的设置具有一定的梯度,由浅入深,所提出的问题也很明确简单变量定义:变量名:=文本添加:变量名+=文本引用$(变量名)$变量名$单字符变量C=gcc$CMakefile的规则和变量变量定义的两种方式递归展开方式VAR=var简单方式 VAR:=var变量使用$(VAR)用”$”则用”$”来表示上嵌网院 在整堂课的教学中,刘教师总是让学生带着问题来学习,而问题的设置具有一定的梯度,由浅入深,所提出的问题也很明确刚才的例子OBJS=kang.o yul.oOBJS=kang.o yu
26、l.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)-c yul.c-o yul.oMakefile的规则和变量上嵌网院 在整堂课的教学中,刘教师总是让学生带着问题来学习,而问题的设置具有一定的梯度,由浅入深,所提出的问题也很明确$cat makefileCC:=gccOPTIONS:=-O3OBJECTS:=main.o OBJECTS+=input.o compute
27、.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:makefile$(HEADERS)$(SOURCES)tar-cvf power.tar makefile$(HEADERS)$(SOURCES)clean:rm rf*.o$Makefile的规则和变量-简单变量实例上
28、嵌网院 在整堂课的教学中,刘教师总是让学生带着问题来学习,而问题的设置具有一定的梯度,由浅入深,所提出的问题也很明确变量名变量名意义意义$当前目标的名称$?比当前目标更新的已修改的依赖性列表$比当前目标更新的已修改的依赖性名称$用空格分开的所有依赖性列表Makefile的规则和变量-内置变量上嵌网院 在整堂课的教学中,刘教师总是让学生带着问题来学习,而问题的设置具有一定的梯度,由浅入深,所提出的问题也很明确complete:powerecho”Build complete”power:$(OBJECTS)$(CC)$(OPTIONS)-O$-lmecho”The executable is i
29、n 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虚目标虚目标Makefile的规则和变量上嵌网院 在整堂课的教学中,刘教师总是让学生带着问题来学习,而问题的设置具有一定的梯度,由浅入深,所提出的问题也很明确MakeMake进行处理的依据进行处理的依据包括目标体、依赖文件及其之间的命令语句包括目标体、依赖文件及其之间的命令语句 隐式规则隐式规
30、则模式规则模式规则 Makefile的规则和变量上嵌网院 在整堂课的教学中,刘教师总是让学生带着问题来学习,而问题的设置具有一定的梯度,由浅入深,所提出的问题也很明确隐式规则隐含规则能够告诉make怎样使用传统的技术完成任务,这样,当用户使用它们时就不必详细指定编译的具体细节,而只需把目标文件列出即可 例子OBJS=kang.o yul.oCC=gccCFLAGS=-Wall-O-gsunq:$(OBJS)$(CC)$-o$Makefile的规则和变量上嵌网院 在整堂课的教学中,刘教师总是让学生带着问题来学习,而问题的设置具有一定的梯度,由浅入深,所提出的问题也很明确AR 归档维护程序的名称,
31、默认值为 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的规则和变量上嵌网院 在整堂课的教学中,刘教师总是让学生带着问题来学习,而问题的设置具有一定的梯度,由浅入深,所提出的问题也很
32、明确常见隐式规则目录C编译:.c.c变为.o.o$(CC)c$(CPPFLAGS)$(CFLAGS)C+编译:.cc.cc或或.C.C变为.o.o$(CXX)-c$(CPPFLAGS)$(CXXFLAGS)Pascal编译:.p.p变为.o.o$(PC)-c$(PFLAGS)Fortran编译:.r.r变为-o-o$(FC)-c$(FFLAGS)。Makefile的规则和变量上嵌网院 在整堂课的教学中,刘教师总是让学生带着问题来学习,而问题的设置具有一定的梯度,由浅入深,所提出的问题也很明确模式规则 模式规则是用来定义相同处理规则的多个文件的。它不同于隐式规则,隐式规则仅仅能够用make默认的
33、变量来进行操作,而模式规则还能引入用户自定义变量,为多个文件建立相同的规则,从而简化了Makefile的编写 模式规则的格式类似于普通规则,这个规则中的相关文件前必须用“%”标明 Makefile的规则和变量上嵌网院 在整堂课的教学中,刘教师总是让学生带着问题来学习,而问题的设置具有一定的梯度,由浅入深,所提出的问题也很明确模式规则下OBJS=kang.o yul.oCC=gccCFLAGS=-Wall-O-gsunq:$(OBJS)$(CC)$-o$%.o:%.c%.o:%.c$(CC)$(CFLAGS)-c$-o$Makefile的规则和变量上嵌网院 在整堂课的教学中,刘教师总是让学生带着
34、问题来学习,而问题的设置具有一定的梯度,由浅入深,所提出的问题也很明确例子2(main.c main.h)OBJ=main.ohello:$(OBJ)$(CC)$-o$%.o:%c$(CC)-c$-o$clean:$(RM)helloMakefile的规则和变量上嵌网院 在整堂课的教学中,刘教师总是让学生带着问题来学习,而问题的设置具有一定的梯度,由浅入深,所提出的问题也很明确不存在的文件,而且也无需创建他们允许你强制执行某些事件,而这些事件在正常规则中是不会发生的规则虚目标和先决条件如果虚目标作为先决条件使用,它必须作为目标出现在某处虚目标总是使与之有关的命令被执行虚目标作为先决条件,总是相
35、应的目标重建知识点4-Makefile的虚目标上嵌网院 在整堂课的教学中,刘教师总是让学生带着问题来学习,而问题的设置具有一定的梯度,由浅入深,所提出的问题也很明确常见虚目标列表目标目标意义意义all生成工程中所以可以执行者,通常是makefile的第一个生成目标test运行程序的自动测试套件clean删除make all生成的所有文件install在系统目录中安装工程项目生成的可执行文件和文档uninstall删除make install 安装的所有文件Makefile的虚目标上嵌网院 在整堂课的教学中,刘教师总是让学生带着问题来学习,而问题的设置具有一定的梯度,由浅入深,所提出的问题也很明
36、确$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 netc.h rcopy.h gcc-c clientc$make install.
37、不存在的文件,仅为完成某些功能Makefile的虚目标上嵌网院 在整堂课的教学中,刘教师总是让学生带着问题来学习,而问题的设置具有一定的梯度,由浅入深,所提出的问题也很明确上述问题用.PHONY的特殊目标解决.PHONY:cleanclean:rm rf*.oMakefile的特殊目标上嵌网院 在整堂课的教学中,刘教师总是让学生带着问题来学习,而问题的设置具有一定的梯度,由浅入深,所提出的问题也很明确特殊目标特殊目标目的目的.DEFAULTS 如果make找不到生成目标的任何makefile入口或后缀规则,它就执行与目标相关的命令.IGNORE如果某一行makefile包含该目标,make忽略
38、错误代码并继续建立,如果一个命令不正常存在,make自然会停止。带有-i选项的make命令可以执行相同的任务.PHONY允许您指定一个不是文件的目标,所以您能指示make调用一系列makefile中的命令,即使在您的当前目录中有一个具有目标名称的文件.SILENTmake执行这些命令但不显示这些命令,带有-s选项的make可以执行相同的任务。如7.2.5节所讨论的,在该命令前放置一个符号就可以执行一个特别命令.SUFFIXES为目标指定的前提(后缀)可以与后缀规则相关联。如果与目标没有相关联的前提,已存在 的后缀列表就会被删除Makefile的特殊目标上嵌网院 在整堂课的教学中,刘教师总是让学
39、生带着问题来学习,而问题的设置具有一定的梯度,由浅入深,所提出的问题也很明确Tab键-常见错误漏掉Tab$makeMakefile:4:*missing separator.Stop$cat t Makefile$cat-e Makefile知识点5-Makefile使用和调试上嵌网院 在整堂课的教学中,刘教师总是让学生带着问题来学习,而问题的设置具有一定的梯度,由浅入深,所提出的问题也很明确使用非标准的Makefile名称显示所执行的顺序$make f prog1.makefile$make-nMakefile使用和调试上嵌网院 在整堂课的教学中,刘教师总是让学生带着问题来学习,而问题的设置
40、具有一定的梯度,由浅入深,所提出的问题也很明确任务1:为hello world 编写makefile上嵌网院 在整堂课的教学中,刘教师总是让学生带着问题来学习,而问题的设置具有一定的梯度,由浅入深,所提出的问题也很明确注意事项提示1:编写一个头文件,两个C文件main.c 是主程序hello.c编写打印”hello world”的函数提示2:编写makefile,建立直接的依赖关系使用默认规则定义变量CROSS_COMPILE:=CC:=(CROSS_COMPILE)gccMakefile练习任务:为hello world 编写makefile上嵌网院 在整堂课的教学中,刘教师总是让学生带着问题来学习,而问题的设置具有一定的梯度,由浅入深,所提出的问题也很明确课程总结本节课程内容本节课程内容Make实用程序的功能使用makefile管理多模块软件makefile的规则,变量makefile的虚目标规则Makefile文件调试下下节节课程课程C语言基础