- 6
- 0
- 约1.75千字
- 约 8页
- 2016-09-26 发布于天津
- 举报
第9章c编译器——gcc
第9章 C编译器—— gcc 9.1 gcc简介 9.2 make与Makefile 9.1 gcc简介 9.1.1 gcc编译步骤 Linux下比较常用的C编译器是gcc(GNU C compiler)。这是一个效率很高的著名编译器,用它编译C程序文件一般通过以下步骤: (1)预处理(Preprocessing),调用cpp程序分析程序文件中出现的各种命令及语法。 (2)编译(Compilation),调用cc1程序将C程序文件“翻译”成汇编语言。 (3)汇编(Assembly),调用as将上一步产生的内存内的汇编指令转化为二进制机器指令,产生带“.o”后缀的目标文件(Object file)。 (4)连接(Linking)调用程序ld将上一步产生的各目标文件及引用的函数连接,生成可执行文件。 9.1.2 gcc的用法 gcc的基本用法是: gcc –o 生成的可执行文件名称 C程序1 ... C程序n↙ 此用法将若干个C程序通过以上4步处理,最后生成一个可在提示符下直接执行的可执行文件。如果只需要作前3步处理,可以用: gcc –c C程序↙ gcc的其他常用可选项有: (1)编译选项: -O:对编译的结果进行优化,但编译过程中可能需要使用很多的内存以及消耗更长的时间。 -O2:比-O更好的优化,当然也耗费更多的资源与时间。 -I目录:定义头文件搜索目录。 (2)连接选项: -L库文件目录:指定库文件所在的目录。 -l库文件:在连接时使用指定的库文件。 -static:禁止使用共享函数库连接。 -shared:尽量与共享函数库连接,这是缺省选择。 gcc使用的可选项非常多,用户可通过: man gcc↙ 9.2 make与Makefile make命令可以根据当前目录下的Makefile文件的内容实现对软件包的自动编译。它可以大大减少手工编译带来的不便。以下是一个简单的Makefile文件的内容: myprogram: prog1.o prog2.o↙ gcc –o myprogram prog1.o prog2.o↙ prog1.o: prog1.c prog1.h↙ gcc –c –I. –o prog1.o prog1.c↙ prog2.o: prog2.c util.c↙ gcc –c –o prog2.o prog2.c util.c↙ clean: ↙ rm –f myprogram *.o↙ 这个Makefile文件中包含了一系列目标(target),每个目标由目标名称(例如“myprogram:”)、实现该目标所需的文件或其他目标(称为“dependency”,例如要实现myprogram这个target就必须有prog1.o和prog2.o这两个target,而要实现prog1.o这个target又必须依赖于prog1.c以及prog1.h这两个文件,等等)以及为实现该目标而应该完成的一组命令(例如为实现myprogram目标,必须执行命令“gcc –o myprogram prog1.o prog2.o”)。 make命令的用法是: make [目标]↙ 在Makefile中还可以使用一些约定的缩写来简化命令的结果。例如: $@:代表该目标的全名。 $*:代表删除了后缀(即小数点及其后部分)的目标名。 $:代表该目标的第一个相关目标名。 在Makefile中还可以加入注释。注释所在的行用注释符“#”开头。另外,还可以定义宏,使Makefile的结构更加清晰。 小结 命令总结如下: gcc:GNU的C编译器。 make:按Makefile文件的指示实现软件包的自动编译和安装。 本章主要介绍gcc的基本用法和Makefile的编写,并没有涉及到如何开始一个程序,这方面可以参考其他C语言的书。Makefile的文件在开发中是非常有用的,它可以简化编译的操作,在Linux下的工具源码包里面都包含了Makefile文件。了解Makefile有助于掌握源程序。 冶金工业出版社 高等教育“十一五”规划教材 * 冶金工业出版社 高等教育“十一五”规划教材 *
原创力文档

文档评论(0)