gcc编译可执行程序有4个步骤:预处理、编译、汇编、链接。编译阶段消耗时间、系统资源最多。
从源文件hello.c到目标可执行文件hello,可以按照下面的执行命令,一步一步生成。
gcc -E hello.c -o hello.i
gcc -S hello.i -o hello.s
gcc -c hello.s -o hello.o
gcc hello.o -o hello
但在实际开发中,使用下面一行命令就可以了。
gcc -o hello hello.c
gcc常用命令参数
-v:
查看gcc版本。
-E:
进行预处理,生成.i文件。
-S:
编译,生成.s文件。
-c:
只作预处理、编译、汇编。得到.o文件,二进制文件。
-o:
指定生成文件名。如果不指定输出文件名,则默认生成a.out。
-g:
编译时添加调试文件。也就是指生成的可执行程序可以进行gdb调试。默认g2等级。
-On:
编译优化,n越大优化的越多。n=0~3,默认优化等级是2。不能与-g一起使用。
-Wall:
显示所有警告信息。
-I(大i):
指定头文件所在目录。如果头文件和源文件不在同一目录,需要指定头文件所在目录。如果头文件和源文件在同一目录,可以省去指定。
-i:
指定头文件名。一般不使用。
-L:
指定库文件目录。
-l(小L):
指定库文件名。
-D:
向当前程序中注册一个宏定义。通常用于设置打印调试信息的开关。下列代码,调用“gcc -o hello hello.c -D DEBUG”编译,运行时就会打印出“i = 10”的信息。
#include <stdio.h>
#include <stdlib.h>
int main()
{
int i = 10;
#ifdef DEBUG
printf("i = %d\n", i);
#endif
printf("hello world!\n");
return 0;
}