GCC工具的具体使用

2021-08-24 14:52:02 浏览数 (1)

编译工具链

高级语言翻译成机器语言不是一步到位的,以C语言为例,通常要经历以下四个步骤:

代码语言:javascript复制
预处理--->编译--->汇编--->连接

源代码--->汇编代码--->目标代码--->可执行程序

每一步都需要使用不同的工具,比如源代码需要借助编译工具翻译成汇编代码,汇编代码需要借助汇编器翻译成目标代码,最后还要借助连接器帮忙整理汇总, 那么这些个工具集合到一块就叫做工具链

GCC工具链

由GNU提供的一整套的工具集,这套工具集中包含了汇编器,编译器和链接器,二进制转换,调试工具等

通过GCC,我们可以一步完成源码到可执行文件的编译, 也可以单步独立进行,方便程序员获取中间代码代码,进行调试

GCC常用命令选项

假设只编译单个源文件test.c

无选项编译

在当前目录下直接生成可执行文件,默认名称为a.out

选项-o

在当前目录下生成名为test的可执行文件

选项-E

在当前目录下生成名为test.i的预处理文件

选项-S

在当前目录下生成名为test.s的汇编文件,将源码转成汇编代码

选项-c

在当前目录下生成名为test.o的目标文件

选项-O数字

在当前目录下生成名为test的可执行文件,并且使用编译优化级别1编译程序。可选级别为1~3,级别越大优化效果越好,但编译时间越长。

多文件编译

比如一个汇编文件aaa.s一个C源文件test.c:

方式一 多文件同时编译

代码语言:javascript复制
gcc aaa.s test.c -o bbb

方式二 多文件分开编译

代码语言:javascript复制
gcc -c aaa.s  //生成aaa.o

gcc -c test.c  //生成test.o
代码语言:javascript复制
gcc  test.o aaa.o -o test

方式三 编写makefile文件进行编译

代码语言:javascript复制
# 我是注释
SRC=aaa.s test.c
main: $(OBJS)   #指定需要生成的文件名称以及相应的依赖关系 
        gcc -o main $(SRC) #生成所需要的指令
代码语言:javascript复制
# cs-make

以上三种方法相比较,第一中方法编译时需要所有文件重新编译,而第二种方法可以只重新编译修改的文件,未修改的文件不用重新编译 ,第三种方法适用于文件较多依赖关系复杂的工程编译

0 人点赞