使用GCC,编译过程分为4个阶段。
预处理,适当编译,汇编,链接。
在编译过程中,可以通过手工方式重新创建这些步骤。
第一步:运行预处理器,使用-E选项告诉GCC在处理后停止编译。
通过"Hello world!"的简单例子来说明,定义main.c
#include <stdio.h>
int main()
{
printf("Hello world!\n");
return 0;
}
gcc -E main.c -o main.cpp(预处理结构保存在此。)
查看main.cpp文件就会发现头文件内容已经插入到文件里了。
然后将main.cpp 编译成目标文件。
gcc -x cpp-output -c main.cpp -o main.o
-x选项告诉GCC重指定的步骤开始编译。这里也就是编译器处理后的源代码(cpp-output).
最后是链接目标文件,生成可执行文件。
gcc main.o -o main。
以上四步可以用一个命令实现:gcc main.c -o main。
GCC的命令行选项
-o FILE 指定输出文件名,在编译时,这一选项不是必须的,如果不指定,默认文件名是a.out。
-c 只编译不链接。
-DFOO=BAR 命令行定义预处理宏FOO,其值为BAR。
-IDIRNAME 将DIRNAME加入到包含文件的搜索目录列表中。
-lDIRNAME 将DIRNAME加入到库文件的搜索目录列表中。
-static 链接静态库,默认情况是链接共享库。
-lFOO 链接名为libFOO的函数库。
-g 在可执行程序中包含标准调试信息。
-ggdb 在可执行程序中包含只有GNU debugger(gdb)才能识别的大量信息。
-O 优化编译过的代码。
-w 关闭所以警告,建议不要使用此项。
-Wall 允许发出GCC能提供的所有有用的警告。也可以用-W{warning}来标记指定的警告。
-werror 将所有警告转换为错误,以在警告发生时终止编译过程。
-v 显示在编译过程中,每一步用到的命令。