gcc [选项] 文件名
-c 表示只编译不链接,生成.o目标文件,用于
编译没有主函数的程序
-E 表示对程序进行预处理,预处理主要进行
头文件的导入和宏的替换
-S 生成汇编文件(.s为后缀的文件)
-g 生成调试信息,用于调试程序
-o 指定生成的可执行文件的名称,默认的文件
名是a.out
-O 让编译器自动对程序做优化
-std 用于指定程序执行时遵循的标准 如: :cc xxx.c-std=c99
选项 -o
用法:gcc test.c-o test
作用:将test.c预处理、汇编、编译并链接形成可执行文件test。-o选项用来指定输出文件的文件名。
选项 -E
用法:gcc -Etest.c -o test.i
作用:将test.c预处理输出test.i文件。
选项 -S
用法:gcc -Stest.i
作用:将预处理输出文件test.i汇编成test.s文件。
选项 -c
用法:gcc -ctest.s
作用:将汇编输出文件test.s编译输出test.o文件。
无选项链接
用法:gcc test.o-o test
作用:将编译输出文件test.o链接成最终可执行文件test。
选项-O
用法:#gcc -O1test.c -o test
作用:使用编译优化级别1编译程序。级别为1~3,级别越大优化效果越好,但编译时间越长。
例子: 文件test.c
#include <stdio.h>
int main()
{
int score= 0;
do
{
printf("请输入考试成绩:\n");
scanf("%d",&score);
}while(score< 60);
printf("恭喜你,考试通过了\n");
return 0;
}
编译过程当gcc test.c
第一步:gcc -E test.c -o test.i
进行预处理生成test.i
预处理工作:把包含其他源文件、定义宏、根据条件包含这些代码
第二步:gcc –Stest.i
将预处理输出文件test.i汇编成test.s文件。
汇编:把test.i 编译成 很接近机器语言的 汇编语言
第三步:gcc –ctest.s
编译:把汇编文件编译得到test.o文件 这个文件是二进制写的,计算机可直接读懂
第四步:gcc test.o
连接:生成a.out可执行文件 可直接运行
多源文件的编译方法
如果有多个源文件,基本上有两种编译方法:
[假设有两个源文件为test.c和testfun.c]
多个文件一起编译
用法1:gcc testfun.c test.c -o test
作用:将testfun.c和test.c分别编译后链接成test可执行文件。
分别编译各个源文件,之后对编译后输出的目标文件链接。
用法2:
#gcc -c testfun.c //将testfun.c编译成testfun.o
#gcc -c test.c //将test.c编译成test.o
#gcc -o testfun.o test.o -o test //将testfun.o和test.o链接成test