1 概述
══════GNU编译工具集(即GCC)包含一个编译器和一套将高层源码生成二进制文件的工具
集。GCC不仅是GNU/Linux上事实上的编译器,还是嵌入式系统开发的标准编译器。
这里只是简单的了解下GCC的基本特点和一些高级特点(如优化),GCC的全部功能
还需要去看官方的文档。[http://gcc.gnu.org/]
2 编译简介
══════════阶段:预编译—>编译—>汇编—>链接各编译阶段的输入与输出:
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
阶段 输入 输出 GCC示例
预编译 *.c *.i gcc -E test.c -o test.i
编译 *.i *.s gcc -S test.i -o test.s
汇编 *.s *.o gcc -c test.s -o test.o
链接 *.o gcc test.o -o test
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
在预处理阶段,源文件和包含的头文件一起处理。在这一些阶段,对#ifdef这类
的预编译指令进行解析,然后通过编译阶段的编译为汇编做准备,在汇编阶段,
文件转化为相应的机器指令,生成目标文件。最后将这些机器码链接起来(有可
能与其他机器码链接)形成可执行的二进制文件。
3 GCC的格式
═══════════将源文件编译成可执行文件:$ gcc test.c -o test这样就生成了一个test的可
执行文件(-o 就是输出选项)。如果希望生成源文件的目标文件,可以使用-c选
项$ gcc -c test.c这样生成的目标文件默认为test.o,也可以强制要求生成其他
名字。$ gcc -c test.c -o newtest.o当有多个源文件时, 使用下面的命令能
够将三个源文件编译并链接为一个名为 goal的可执行文件$ gcc -o goal
first.c second.c third.c注意:如果只是把一个源文件编译为目标文件,那么
因为链接还没有开始,所以源文件不需要一定有main函数。
4 有用的选项
════════════1.在很多情况下,保存头文件的目录与保存源文件的目录不是同一个。如:源程
序保存在./src中,头文件在./inc中。我们可以在./src目录中编译程序,告诉
gcc头文件在./inc中。$ gcc test.c -I ../inc -o test可以重复使用I格式来
指定包含多个子目录: $ gcc test.c -I ../inc —I ../../inc2 -o test 2.为
了配置软件,可以在编译的时候指定符号常量如在源文件或头文件中定义符号常
量:#define TEST可以在命令行中使用-D定义:$ gcc -D TEST test.c -o test
3.用于汇编而不用于源码编译阶段的选项,如:$ gcc -c -g -Wa, -ahl, -L
test.c -Wa选项将后续选项直接传递到汇编阶段供汇编器使用。
5 编译警告
══════════最常用的检查普通警告的选项是-Wall,