文档详情

嵌入式Linux下C程序设计--gcc,gdb,makefile.ppt

发布:2017-02-25约4.4千字共22页下载文档
文本预览下载声明
嵌入式Linux下C程序设计 主讲:成宝宗 GCC编译器 主讲:成宝宗 程序编译过程 gcc可以使程序员灵活地控制编译过程。编译过程一般可以分为下面四个阶段,每个阶段分别调用不同的工具进行处理。 gcc的使用格式 $ gcc [options][filenames] 其中filenames为所要编译的程序源文件。 当使用gcc时,gcc会完成预处理、编译、汇编和连接。前三步分别生成目标文件,连接时,把生成的目标文件链接成可执行文件。gcc可以针对支持不同的源程序文件进行不同处理,文件格式以文件的后缀来识别。 使用优化选项 当用gcc编译C代码时,它会试着用最少的时间完成编译并且使编译后的代码易于调试. 易于调试意味着编译后的代码与源代码有同样的执行次序,编译后的代码没有经过优化。有很多选项可用于告诉gcc,在耗费更多编译时间和牺牲易调试性的基础上,产生更小更快的可执行文件。这些选项中最典型的是-O和-O2选项。 -O选项告诉gcc对源代码进行基本优化。这些优化在大多数情况下都会使程序执行的更快。 -O2选项告诉gcc产生尽可能小和尽可能快的代码。-O2选项将使编译的速度比使用-O 时慢。但通常产生的代码执行速度会更快。 使用调试选项 gcc 支持数种调试。在这些选项里最常用的是-g选项。 -g选项告诉gcc产生能被GNU调试器使用的调试信息以便调试程序。gcc 提供了一个很多其他C编译器里没有的特性,在gcc里能使-g和-O(产生优化代码)连用。这一点非常有用,因为能在与最终产品尽可能相近的情况下调试代码。同时使用这两个选项时必须清楚所写的某些代码已经在优化时被gcc作了改动。 Makefile 主讲:成宝宗 Makefile文件简介 Makefile 一个工程中的源文件不计数,其按类型、功能、模块分别放在若干个目录中,makefile定义了一系列的规则来指定,哪些文件需要先编译,哪些文件需要后编译,哪些文件需要重新编译,甚至于进行更复杂的功能操作,因为 makefile就像一个Shell脚本一样,其中也可以执行操作系统的命令。 makefile带来的好处就是——“自动化编译”,一旦写好,只需要一个make命令,整个工程完全自动编译,极大的提高了软件开发的效率。make是一个命令工具,是一个解释makefile中指令的命令工具。  make工具最主要也是最基本的功能就是通过makefile文件来描述源程序之间的相互关系并自动维护编译工作。而makefile 文件需要按照某种语法进行编写,文件中需要说明如何编译各个源文件并连接生成可执行文件,并要求定义源文件之间的依赖关系。 一个简单的Makefile的例子 test:prog.o code.o gcc –o test prog.o code.o ?prog.o:prog.c prog.h code.h gcc –c prog.c –o prog.o ?code.o:code.c code.h gcc –c code.c –o code.o ?clean: rm –f *.o make命令 Makefile写好之后,每次改变了某些源文件,只要执行make命令: # make 所有必要的重新编译将执行。make程序利用makefile中的数据和每个文件的最后修改时间来确定那个文件需要更新,对于需要更新的文件,make程序执行makefile数据中定义的命令来更新。 Makefile编写规则 一个Makefile文件主要含有一系列的规则,每条规则包含以下内容。 一个目标(target),即make最终需要创建的文件,如可执行文件和目标文件;目标也可以是要执行的动作,如“clean”。 一个或多个依赖文件(dependency)列表,通常是编译目标文件所需要的其他文件。 一系列命今(command),是make执行的动作,通常是把指定的相关文件编译成目标文件的编译命令,每个命令占一行,且每个命令行的起始字符必须为TAB字符。 一个带变量的Makefile的例子 OBJS=prog.o code.o CC=gcc ? test:${ OBJS } ${ CC } –o test ${ OBJS } prog.o:prog.c prog.h code.h ${ CC } –c prog.c –o prog.o code.o:code.c code.h ${ CC } –c code.c –o code.o ? clean: rm –f *.o Makefile的隐含规则 在上面的例子中,几个产生目标文件的命令都是从“.c”的C语言源文件和相关文件通过编译产生“.o”目标文件,这也是一般的步骤。实际
显示全部
相似文档