编译过程 、单文件与多文件编译操作(GCC编译器)

  

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

 

 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值