1、Neusoft Institute of Information2022年8月12日星期五2022-8-12大连东软信息学院大连东软信息学院 嵌入式系统导论课程组嵌入式系统导论课程组嵌入式系统导论嵌入式系统导论Neusoft Institute of Information2022年8月12日星期五2022-8-12第2章 嵌入式交叉编译环境2.1嵌入式交叉编译环境嵌入式交叉编译环境12.2NFS服务服务22.3Samba服务服务32.4Windows和和Linux混合开发模式混合开发模式42.5GCC编译器编译器52.7Make工具的使用工具的使用72.8嵌入式交叉编译环境的搭建嵌入式交叉编
2、译环境的搭建82.6GDB调试器调试器6Neusoft Institute of Information2022年8月12日星期五2022-8-12交叉开发环境:宿主机调试通道目标机交叉开发环境:宿主机调试通道目标机“在谁的上面编写运行在谁上的程序的问题在谁的上面编写运行在谁上的程序的问题”2.1嵌入式交叉编译环境简介嵌入式交叉编译环境简介Neusoft Institute of Information2022年8月12日星期五2022-8-12第2章 嵌入式交叉编译环境2.1嵌入式交叉编译环境嵌入式交叉编译环境12.2NFS服务服务22.3Samba服务服务32.4Windows和和Linu
3、x混合开发模式混合开发模式42.5GCC编译器编译器52.7Make工具的使用工具的使用72.8嵌入式交叉编译环境的搭建嵌入式交叉编译环境的搭建82.6GDB调试器调试器6Neusoft Institute of Information2022年8月12日星期五2022-8-122.2 NFS服务服务 NFS服务可以使网络上的服务可以使网络上的同为同为Linux或或Unix系系统统主机共享文件系统。主机共享文件系统。NFS可以将远程文件系统载入在本地文件系统可以将远程文件系统载入在本地文件系统下下。远程的硬盘、目录和光驱都可以变成本地。远程的硬盘、目录和光驱都可以变成本地主机目录树中的一个子目
4、录。载入后与处理自主机目录树中的一个子目录。载入后与处理自己的文件系统一样使用即可。不只方便,也节己的文件系统一样使用即可。不只方便,也节省了重复保存文件的空间、传输文件的时间及省了重复保存文件的空间、传输文件的时间及网络带宽。网络带宽。Neusoft Institute of Information2022年8月12日星期五2022-8-12 NFS特点特点NFS系统也是使用系统也是使用C/S体系结构,就是有服务体系结构,就是有服务器端与客户端器端与客户端服务器端提供共享的文件系统,必须把文件系服务器端提供共享的文件系统,必须把文件系统输出统输出(export)出去出去客户端则要把文件系统载
5、入到自己的系统下客户端则要把文件系统载入到自己的系统下使用使用NFS,需要在服务器端设置输出,在客户,需要在服务器端设置输出,在客户端设置载入端设置载入2.2 NFS服务服务Neusoft Institute of Information2022年8月12日星期五2022-8-12NFS服务器端配置服务器端配置(1)关闭防火墙关闭防火墙(2)配置共享目录配置共享目录-客户端主机客户端主机IP范范围围(3)主机主机IP(4)启动启动NFS服务服务2.2 NFS服务服务NFS客户端客户端(1)设置客户端设置客户端IP地址地址(2)挂载共享目录挂载共享目录mount -t nfs 主机主机ip:共享
6、目录共享目录 挂载点挂载点注意事项:关闭防火墙,主机与客户端在同一注意事项:关闭防火墙,主机与客户端在同一ip段段Neusoft Institute of Information2022年8月12日星期五2022-8-12具体配置步骤具体配置步骤服务器端服务器端1)关闭防火墙)关闭防火墙2.2 NFS服务服务Neusoft Institute of Information2022年8月12日星期五2022-8-122)配置)配置NFS服务器服务器2.2 NFS服务服务Neusoft Institute of Information2022年8月12日星期五2022-8-122-1)设置共享目)
7、设置共享目录和主机范围录和主机范围2.2 NFS服务服务Neusoft Institute of Information2022年8月12日星期五2022-8-122-2)设置其他选项)设置其他选项2.2 NFS服务服务Neusoft Institute of Information2022年8月12日星期五2022-8-122.2 NFS服务服务2-3)设置其他选项)设置其他选项Neusoft Institute of Information2022年8月12日星期五2022-8-123)设置设置NFS服务器的服务器的IP2.2 NFS服务服务Neusoft Institute of Inf
8、ormation2022年8月12日星期五2022-8-124)启动)启动NFS服务服务2.2 NFS服务服务Neusoft Institute of Information2022年8月12日星期五2022-8-12 客户端客户端1)配置)配置ip2.2 NFS服务服务Neusoft Institute of Information2022年8月12日星期五2022-8-122)挂载)挂载NFS2.2 NFS服务服务Neusoft Institute of Information2022年8月12日星期五2022-8-12第2章 嵌入式交叉编译环境2.1嵌入式交叉编译环境嵌入式交叉编译环境1
9、2.2NFS服务服务22.3Samba服务服务32.4Windows和和Linux混合开发模式混合开发模式42.5GCC编译器编译器52.7Make工具的使用工具的使用72.8嵌入式交叉编译环境的搭建嵌入式交叉编译环境的搭建82.6GDB调试器调试器6Neusoft Institute of Information2022年8月12日星期五2022-8-12 Samba服务可实现服务可实现Windows和和Linux不同系不同系统统间交换文件共享。间交换文件共享。2.3 Samba服服务务Neusoft Institute of Information2022年8月12日星期五2022-8-1
10、2具体设置步骤具体设置步骤 服务器端服务器端1)关闭防火墙)关闭防火墙(同(同NFS)2.3 Samba服服务务Neusoft Institute of Information2022年8月12日星期五2022-8-122)配置)配置Samba服务器服务器2.3 Samba服服务务Neusoft Institute of Information2022年8月12日星期五2022-8-122-1)设置共享目录)设置共享目录和访问权限和访问权限2.3 Samba服服务务Neusoft Institute of Information2022年8月12日星期五2022-8-122.3 Samba服服
11、务务2-2)设置共享目录)设置共享目录和访问权限和访问权限Neusoft Institute of Information2022年8月12日星期五2022-8-122.3 Samba服服务务Neusoft Institute of Information2022年8月12日星期五2022-8-122.3 Samba服服务务2-4)服务器设置)服务器设置Neusoft Institute of Information2022年8月12日星期五2022-8-122.3 Samba服服务务2-4)服务器设置)服务器设置Neusoft Institute of Information2022年8月1
12、2日星期五2022-8-123)配置)配置Samba服务器主机服务器主机ip2.3 Samba服服务务Neusoft Institute of Information2022年8月12日星期五2022-8-124)启动)启动Samba服务服务2.3 Samba服服务务Neusoft Institute of Information2022年8月12日星期五2022-8-12客户端客户端1)配置)配置Windows 的的IP只要和你开的服务器只要和你开的服务器IP在同一网段就行在同一网段就行 2.3 Samba服服务务Neusoft Institute of Information2022年8月
13、12日星期五2022-8-122)在)在Windows上访问共享上访问共享2.3 Samba服服务务Neusoft Institute of Information2022年8月12日星期五2022-8-123)访问成功)访问成功2.3 Samba服服务务Neusoft Institute of Information2022年8月12日星期五2022-8-12第2章 嵌入式交叉编译环境2.1嵌入式交叉编译环境嵌入式交叉编译环境12.2NFS服务服务22.3Samba服务服务32.4Windows和和Linux混合开发模式混合开发模式42.5GCC编译器编译器52.7Make工具的使用工具的使
14、用72.8嵌入式交叉编译环境的搭建嵌入式交叉编译环境的搭建82.6GDB调试器调试器6Neusoft Institute of Information2022年8月12日星期五2022-8-12混合开发模式的必要:混合开发模式的必要:由于初学者对由于初学者对Linux系统不是很熟悉,通常会系统不是很熟悉,通常会采用采用Windows下强大的编辑工具,通过共享再下强大的编辑工具,通过共享再在在Linux系统下进行编译、调试等工作。系统下进行编译、调试等工作。(1)VMware虚拟机设置共享虚拟机设置共享(2)SSH客户端软件客户端软件(3)Windows下的文本编辑工具下的文本编辑工具2.4 W
15、indows和和Linux混合开发模式混合开发模式Neusoft Institute of Information2022年8月12日星期五2022-8-12(1)VMware虚拟机设置共享虚拟机设置共享-12.4 Windows和和Linux混合开发模式混合开发模式Neusoft Institute of Information2022年8月12日星期五2022-8-12(1)VMware虚拟机设置共享虚拟机设置共享-22.4 Windows和和Linux混合开发模式混合开发模式 解压缩文件解压缩文件 tar zxvf VMwareTools-5.0.0-13124.tar.gz C/hom
16、e 安装文件安装文件 进入解压缩后的文件夹:进入解压缩后的文件夹:cd vmware-tools-distrib/安装:安装:./vmware-install.plNeusoft Institute of Information2022年8月12日星期五2022-8-12(1)VMware虚拟机设置共享虚拟机设置共享-32.4 Windows和和Linux混合开发模式混合开发模式 设置共享设置共享 Neusoft Institute of Information2022年8月12日星期五2022-8-12(2)SSH客户端软件客户端软件2.4 Windows和和Linux混合开发模式混合开发模
17、式SSH的英文全称:的英文全称:Secure ShellSSH把所有传输的数据进行加密,并且把所有传输的数据进行加密,并且SSH客户端软件可将传输客户端软件可将传输的数据进行压缩后再传输。的数据进行压缩后再传输。(1)PuTTY(2)Secure Shell ClientNeusoft Institute of Information2022年8月12日星期五2022-8-12(3)Windows下的文本编辑工下的文本编辑工具具2.4 Windows和和Linux混合开发模式混合开发模式 UltraEdit-32 Source InsightNeusoft Institute of Infor
18、mation2022年8月12日星期五2022-8-12第2章 嵌入式交叉编译环境2.1嵌入式交叉编译环境嵌入式交叉编译环境12.2NFS服务服务22.3Samba服务服务32.4Windows和和Linux混合开发模式混合开发模式42.5GCC编译器编译器52.7Make工具的使用工具的使用72.8嵌入式交叉编译环境的搭建嵌入式交叉编译环境的搭建82.6GDB调试器调试器6Neusoft Institute of Information2022年8月12日星期五2022-8-12 gcc(GNU C Compiler)能将能将C、C+语言源程序、汇编语言程序和目标语言源程序、汇编语言程序和目
19、标程序编译、连接成可执行文件。是程序编译、连接成可执行文件。是GNU推出的推出的功能强大、性能优越的多平台编译器,可以在多功能强大、性能优越的多平台编译器,可以在多种硬体平台上编译出可执行程序,其执行效率与种硬体平台上编译出可执行程序,其执行效率与一般的编译器相比平均效率要高一般的编译器相比平均效率要高20%30%。2.5 GCC编译编译器器Neusoft Institute of Information2022年8月12日星期五2022-8-12 gcc的执行过程的执行过程 使用使用gcc由由C语言源代码文件生成可执行文件的过语言源代码文件生成可执行文件的过程要经历四个相互关联的步骤程要经历
20、四个相互关联的步骤 1、预处理预处理(也称预编译,也称预编译,Preprocessing)对头文件(对头文件(include)、预编译语句(如)、预编译语句(如define等)进行分等)进行分析析预处理器预处理器cpp2、编译、编译(Compilation)将预处理后的文件转换成汇编语言将预处理后的文件转换成汇编语言,生成文件生成文件.s编译器编译器ccl3、汇编、汇编(Assembly)由汇编变为目标代码由汇编变为目标代码(机器代码机器代码),生成,生成.o的文件的文件汇编器汇编器as4、连接、连接(Linking)连接目标代码连接目标代码,生成可执行程序生成可执行程序链接器链接器ld 2.
21、5 GCC编译编译器器Neusoft Institute of Information2022年8月12日星期五2022-8-12gcc的执行过程(ESc)四个相互关联的步骤四个相互关联的步骤 源文件源文件.c1、.c源文件源文件2、生成、生成.i文件文件3、生成文件、生成文件.s4、生成、生成.o的文件的文件5、生成可执行程序、生成可执行程序41-E-E-E-E-S-S-S-S-c-c-c-c预处理预处理编译编译汇编汇编链接链接2.5 GCC编译编译器器Neusoft Institute of Information2022年8月12日星期五2022-8-12GNU C 的使用的使用 基本语
22、法基本语法 gcc options filenames 说明:说明:在在gcc后面可以有多个编译选项,同时进行多个编译后面可以有多个编译选项,同时进行多个编译操作。操作。当你不用任何选项编译一个程序时,当你不用任何选项编译一个程序时,GCC将会建立将会建立(假假定编译成功定编译成功)一个名为一个名为a.out的可执行文件。的可执行文件。2.5 GCC编译编译器器Neusoft Institute of Information2022年8月12日星期五2022-8-12gcc选项选项-o选项选项 你能用你能用-o 编译选项来为将产生的可执行文件指定一个文编译选项来为将产生的可执行文件指定一个文件
23、名来代替件名来代替 a.out。例:例:gcc o count count.c-c选项:告诉选项:告诉GCC仅把源代码编译为目标代码仅把源代码编译为目标代码,而取消连而取消连接的步骤。缺省时接的步骤。缺省时GCC建立的目标代码文件有一个建立的目标代码文件有一个.o的扩的扩展名。展名。例:例:gcc c test2.c-E 只运行只运行 C 预编译器。预编译器。-S 编译选项告诉编译选项告诉 gcc 在为在为 C 代码产生了汇编语言文件代码产生了汇编语言文件后停止编译。后停止编译。2.5 GCC编译编译器器Neusoft Institute of Information2022年8月12日星期五
24、2022-8-12-include file功能相当于在代码中使用#include例子用法:gcc-o example example.c-include/usr/include/stdio.h-I 用来指定头文件目录用来指定头文件目录./usr/include目录一般是不用指定的目录一般是不用指定的,但是如果头文件不在但是如果头文件不在/usr/include里我们就要用里我们就要用-I参数指定了,比如头文件放在参数指定了,比如头文件放在/myinclude目录里,那编译命令行就要加上目录里,那编译命令行就要加上 -Imyinclude参数了,如果不加你会得到一个参数了,如果不加你会得到一个
25、“xxxx.h:No such file or directory”的错误。的错误。2.5 GCC编译编译器器Neusoft Institute of Information2022年8月12日星期五2022-8-12第2章 嵌入式交叉编译环境2.1嵌入式交叉编译环境嵌入式交叉编译环境12.2NFS服务服务22.3Samba服务服务32.4Windows和和Linux混合开发模式混合开发模式42.5GCC编译器编译器52.7Make工具的使用工具的使用72.8嵌入式交叉编译环境的搭建嵌入式交叉编译环境的搭建82.6GDB调试器调试器6Neusoft Institute of Informati
26、on2022年8月12日星期五2022-8-12 Gdb(GNU debugger)是)是GNU开发组织发布开发组织发布的一个强大的的一个强大的Unix/Linux下的程序调试工具。下的程序调试工具。是一个命令行的调试器,但是一个命令行的调试器,但gdb具有比很多图形具有比很多图形化调试器更强大的功能。化调试器更强大的功能。可以调试各种程序,包括可以调试各种程序,包括C,C+,JAVA,PASCAL等等 具有远程调试功能对嵌入式非常有用具有远程调试功能对嵌入式非常有用2.6 GDB调试调试器器Neusoft Institute of Information2022年8月12日星期五2022-8
27、-12 Gdb主要可以完成下面任务:主要可以完成下面任务:(1)启动程序,并可以指定某些参数控制程序的)启动程序,并可以指定某些参数控制程序的运行运行(2)可让被调试的程序在用户所指定的断点处停)可让被调试的程序在用户所指定的断点处停住住(3)当程序停止时,检查程序的状态)当程序停止时,检查程序的状态(4)动态地改变程序的参数,可以避过)动态地改变程序的参数,可以避过bug,继,继续查找其他的问题续查找其他的问题2.6 GDB调试调试器器Neusoft Institute of Information2022年8月12日星期五2022-8-12 gdb program也就是你的执行文件,一般在
28、当前目录也就是你的执行文件,一般在当前目录下下2.6 GDB调试调试器器Neusoft Institute of Information2022年8月12日星期五2022-8-12 Gdb的命令可以使用的命令可以使用help命令来查看,命令来查看,help命令只是列命令只是列出出gdb的命令种类。的命令种类。可以使用可以使用help命令,显示命令,显示class种类中的所有命种类中的所有命令。令。可以使用可以使用help命令,查看命令,查看command命令命令的帮助。的帮助。Gdb中输入命令时,可以不用输入命令的全称,只用输中输入命令时,可以不用输入命令的全称,只用输入命令的前几个字符就可以
29、。入命令的前几个字符就可以。在在linux下,可以按两次下,可以按两次TAB键来补齐命令的全称。键来补齐命令的全称。Gdb中运行中运行Linux的的shell程序,如程序,如shell。2.6 GDB调试调试器器Neusoft Institute of Information2022年8月12日星期五2022-8-123.3 GDB调试器调试器Neusoft Institute of Information2022年8月12日星期五2022-8-12加载要调试的执行文件加载要调试的执行文件 file 加载要调试的执行程序加载要调试的执行程序exec。2.6 GDB调试调试器器Neusoft I
30、nstitute of Information2022年8月12日星期五2022-8-123.3 GDB调试器调试器查看源代码查看源代码 list 显示程序第显示程序第linenum行的周围的源程序行的周围的源程序 list 显示函数名为显示函数名为function的函数周围的源程序的函数周围的源程序 list 显示当前行后面的源程序显示当前行后面的源程序 list-显示当前行前面的源程序显示当前行前面的源程序 set listsize n设置一次显示源代码的行数设置一次显示源代码的行数 show listsize查看当前查看当前listsize的设置的设置2.6 GDB调试调试器器Neuso
31、ft Institute of Information2022年8月12日星期五2022-8-12设置断点(设置断点(BreakPoint)break-进入指定函数时停住。进入指定函数时停住。break-在指定行号停住在指定行号停住2.6 GDB调试调试器器Neusoft Institute of Information2022年8月12日星期五2022-8-12清除断点清除断点 delete breakpoints range删除指定的断点,删除指定的断点,breakpoints为断点号,为断点号,range表表示断点号的范围(如:示断点号的范围(如:2-4)。如果不指定断点号,)。如果不指
32、定断点号,则表示删除所有的断点。其简写命令为则表示删除所有的断点。其简写命令为d。比删除更好的一种方法是比删除更好的一种方法是disable断点,断点,disable了断了断点,点,gdb不会删除,当还需要时,不会删除,当还需要时,enable即可,就即可,就好像回收站一样。好像回收站一样。2.6 GDB调试调试器器Neusoft Institute of Information2022年8月12日星期五2022-8-123.3 GDB调试器调试器设置观察点设置观察点观察点一般用来观察某个表达式的值是否变化了。观察点一般用来观察某个表达式的值是否变化了。watch 为表达式(变量)为表达式(变
33、量)expr设置一个观察点。一旦表达设置一个观察点。一旦表达式值有变化时,马上停住。式值有变化时,马上停住。info watchpoints列出当前设置的所有观察点列出当前设置的所有观察点2.6 GDB调试调试器器Neusoft Institute of Information2022年8月12日星期五2022-8-12恢复程序运行和单步调试恢复程序运行和单步调试 run(r)从程序开始运行程序从程序开始运行程序 continue (c)恢复程序运行,直到程序结束,或是下一个断点到来。恢复程序运行,直到程序结束,或是下一个断点到来。step(s)单步执行,进入调用的函数的内部单步执行,进入调用
34、的函数的内部 next(n)单步执行,不会进入调用的函数内部单步执行,不会进入调用的函数内部 finish(f)如果已进入了某函数,而想退出该函数返回到它的调用函数中如果已进入了某函数,而想退出该函数返回到它的调用函数中 2.6 GDB调试调试器器Neusoft Institute of Information2022年8月12日星期五2022-8-12查看运行时数据查看运行时数据 print 查看当前程序的运行数据。查看当前程序的运行数据。为格式。为格式。2.6 GDB调试调试器器 退出退出GDB quit or q 退出退出 GDBNeusoft Institute of Informat
35、ion2022年8月12日星期五2022-8-12练习练习1(1)键入键入vi,编辑一个新文件,编辑一个新文件gexam.c。其内容如下:。其内容如下:#include main()int a,i=0;a=0;while(i10)a=a+2;printf(the value of a=%d n,a);sleep(1);i=i+1;2.6 GDB调试调试器器Neusoft Institute of Information2022年8月12日星期五2022-8-12练习练习1(2)保存退出保存退出exam.c 编译编译exam.c。使用使用 gcc -o examo exam.c 使用使用 gcc
36、 -g -o gexam exam.c 比较比较gexam 与与 examo的大小,因为的大小,因为 gexam含有调试含有调试信息,所以信息,所以gexam比比 examo大。大。执行执行gexam与与examo 执行执行examo 键入键入./examo。这里。这里./表示当前目录表示当前目录 执行执行gexam 键入键入./gexam。2.6 GDB调试调试器器Neusoft Institute of Information2022年8月12日星期五2022-8-12练习练习1(3)使用使用gdb调试程序调试程序(1)启动)启动gdb程序程序(gdb)gdb(2)读入调试程序)读入调试程
37、序(gdb)file gexam(3)列出相应于正在执行的程序的原文件内容)列出相应于正在执行的程序的原文件内容(gdb)list(4)在程序)在程序a=0;处设置一个断点处设置一个断点 (gdb)break 4(注:这里(注:这里4 为程序为程序a=0;所在程序的行号,所在程序的行号,若自己更改)若自己更改)(5)在程序)在程序printf(“the value of a=%d n”,a);处设置一个断点处设置一个断点(6)执行该程序)执行该程序(gdb)run(7)查看变量)查看变量a的值的值(gdb)print a(8)查看变量)查看变量a的类型的类型(gdb)whatis a(9)执行
38、下一个源程序行)执行下一个源程序行(gdb)next(10)从断点开始继续执行到下一个断点)从断点开始继续执行到下一个断点(gdb)continue(11)查看变量)查看变量a的值的值(gdb)print a,看看,看看a是否有变化是否有变化(12)不停地执行()不停地执行(gdb)continue,直到程序结束。,直到程序结束。(13)退出)退出gdb quit2.6 GDB调试调试器器Neusoft Institute of Information2022年8月12日星期五2022-8-12练习练习2:程序功能为先显示一个字符串,再反序显示,使用:程序功能为先显示一个字符串,再反序显示,使
39、用GDB找找出其中的错误并改正出其中的错误并改正#include void my_print(char*string)printf(The string is%sn,string);void my_print2(char*string)char*string2;int size,i;size=strlen(string);string2=(char*)malloc(size+1);for(i=0;i size;i+)string2size-i=stringi;string2size+1=0;printf(The string printed backward is%sn,string2);2.
40、6 GDB调试调试器器Neusoft Institute of Information2022年8月12日星期五2022-8-12练习练习2:程序功能为先显示一个字符串,再反序显示,使:程序功能为先显示一个字符串,再反序显示,使用用GDB找出其中的错误并改正找出其中的错误并改正int main()char my_string=hello there;my_print(my_string);my_print2(my_string);return;2.6 GDB调试调试器器Neusoft Institute of Information2022年8月12日星期五2022-8-12第2章 嵌入式交叉
41、编译环境2.1嵌入式交叉编译环境嵌入式交叉编译环境12.2NFS服务服务22.3Samba服务服务32.4Windows和和Linux混合开发模式混合开发模式42.5GCC编译器编译器52.7Make工具的使用工具的使用72.8嵌入式交叉编译环境的搭建嵌入式交叉编译环境的搭建82.6GDB调试器调试器6Neusoft Institute of Information2022年8月12日星期五2022-8-123.4 make工具的使用工具的使用Make工具及工具及makefile文件概述文件概述Makefile基本知识基本知识Makefile应用应用 1)为单个文件编写)为单个文件编写make
42、file 2)为多个文件编写)为多个文件编写makefile 3)使用不同目录的文件的)使用不同目录的文件的makefile的写法的写法Neusoft Institute of Information2022年8月12日星期五2022-8-12Make工具及工具及makefile文件概述文件概述 GNU Make是程序自动维护工具是程序自动维护工具 在大型的开发项目中,通常有几十到上百个的源文件,如果每在大型的开发项目中,通常有几十到上百个的源文件,如果每次均手工键入次均手工键入 gcc gcc 命令进行编译的话,则会命令进行编译的话,则会 非常不方便。因非常不方便。因此,人们通常利用此,人们
43、通常利用 make make 工具来自动完成编译工作。工具来自动完成编译工作。这些工作包括:这些工作包括:1 1)如果仅修改了某几个)如果仅修改了某几个 源文件,则只重新编译这几个源文件;源文件,则只重新编译这几个源文件;2 2)如果某个头文件被修改了,则重新编译所有包含该头文件的)如果某个头文件被修改了,则重新编译所有包含该头文件的源文件。源文件。Neusoft Institute of Information2022年8月12日星期五2022-8-12Makefile基本知识基本知识 基本基本makefilemakefile结构结构Makefile由一系列规则组成,规则格式如下:由一系列规
44、则组成,规则格式如下:其中:其中:target需要由需要由 make 工具创建的项目,工具创建的项目,通常是目的文件和可通常是目的文件和可执行文件。通常使用执行文件。通常使用“目标(目标(target)”一词来表示要创建的项一词来表示要创建的项目。目。prerequisites 要创建的项目依赖于哪些文件。要创建的项目依赖于哪些文件。command 创建每个项目时需要运行的命令。创建每个项目时需要运行的命令。注:命令前面需要敲入注:命令前面需要敲入tab键,而不是空格!键,而不是空格!target:prerequisites 依赖关系依赖关系 command 命令命令Neusoft Insti
45、tute of Information2022年8月12日星期五2022-8-12Make工具及工具及makefile文件概述文件概述 MakeMake及及makefilemakefile原理原理 GNU makeGNU make的主要工作是读进文本文件的主要工作是读进文本文件makefilemakefile。这些文件主要是。这些文件主要是有关那些文件(目的文件)是从哪些别的文件(依靠文件)中产有关那些文件(目的文件)是从哪些别的文件(依靠文件)中产生的,用什么命令来进行这个产生的过程。生的,用什么命令来进行这个产生的过程。有了这些信息,有了这些信息,makemake会检查磁盘上的文件,如果目
46、的文件的时间会检查磁盘上的文件,如果目的文件的时间比至少它的一个依靠文件旧,比至少它的一个依靠文件旧,MakeMake将执行相应的命令,以便更新将执行相应的命令,以便更新目的文件。目的文件不一定是最后的可执行文件,它可以是任何目的文件。目的文件不一定是最后的可执行文件,它可以是任何一个文件。一个文件。Neusoft Institute of Information2022年8月12日星期五2022-8-12Makefile基本知识基本知识Makefile实例:实例:makefile开始开始myprog:foo.obar.ogccfoo.obar.o-omyprogfoo.o:foo.cfoo.
47、hbar.hgcc-cfoo.c-ofoo.obar.o:bar.cbar.hgcc-cbar.c-obar.oclean:-rm*.o myprogmakefile结束结束Neusoft Institute of Information2022年8月12日星期五2022-8-12Makefile基本知识基本知识 实例说明实例说明 从上面的例子注意到,第一个字符为从上面的例子注意到,第一个字符为#的行为注释行。的行为注释行。第一个非注释行指定第一个非注释行指定 myprog为目标,并且依赖于为目标,并且依赖于 foo.o和和bar.o 文件。文件。foo.o和和bar.o文件又各自有自己的依赖
48、规则文件又各自有自己的依赖规则 makefile中一般都有中一般都有clean规则,在重新编译之前删除以前生成规则,在重新编译之前删除以前生成的各个文件,此条规则没有依赖文件的各个文件,此条规则没有依赖文件 使用使用make工具的执行工具的执行makefile的命令为:的命令为:make或或make makefile)缺省文件名为当前目录下的缺省文件名为当前目录下的makefile或或Makefile或或 GNUmakefile,也可以使用命令行参数,也可以使用命令行参数f指定文件名指定文件名:例如例如 make f filenameNeusoft Institute of Informati
49、on2022年8月12日星期五2022-8-12Makefile基本知识基本知识 实例说明实例说明 如果没有如果没有“-f”参数,在参数,在Linux中,中,GNU make 工具在当前工工具在当前工作目录中按照作目录中按照GNUmakefile、makefile、Makefile的顺序搜索的顺序搜索 makefile文件。文件。通过命令行参数中的通过命令行参数中的target,可指定,可指定make要编译的目标,并且要编译的目标,并且允许同时定义编译多个目标,操作时按照从左向右的顺序依次编允许同时定义编译多个目标,操作时按照从左向右的顺序依次编译译target选项中指定的目标文件。选项中指定
50、的目标文件。如果命令行中没有指定目标,则系统默认如果命令行中没有指定目标,则系统默认target指向描述文件中指向描述文件中第一个目标文件。第一个目标文件。如如 make make cleanNeusoft Institute of Information2022年8月12日星期五2022-8-12Makefile基本知识基本知识 Makefile变量变量环境变量:环境变量:(1)存储文件名列表。)存储文件名列表。(2)存储可执行文件名。)存储可执行文件名。(3)存储编译器标识。)存储编译器标识。(4)存储参数列表。)存储参数列表。比如我们利用比如我们利用makefile变量把上面的变量把上面
侵权处理QQ:3464097650--上传资料QQ:3464097650
【声明】本站为“文档C2C交易模式”,即用户上传的文档直接卖给(下载)用户,本站只是网络空间服务平台,本站所有原创文档下载所得归上传人所有,如您发现上传作品侵犯了您的版权,请立刻联系我们并提供证据,我们将在3个工作日内予以改正。