编译工具链
高级语言翻译成机器语言不是一步到位的,以C语言为例,通常要经历以下四个步骤:
1 | 预处理--->编译--->汇编--->连接 |
每一步都需要使用不同的工具,比如源代码需要借助编译工具翻译成汇编代码,汇编代码需要借助汇编器翻译成目标代码,最后还要借助连接器帮忙整理汇总, 那么这些个工具集合到一块就叫做工具链
GCC工具链
由GNU提供的一整套的工具集,这套工具集中包含了汇编器,编译器和链接器,二进制转换,调试工具等
通过GCC,我们可以一步完成源码到可执行文件的编译, 也可以单步独立进行,方便程序员获取中间代码代码,进行调试
GCC常用命令选项
假设只编译单个源文件test.c
无选项编译
1
2
3gcc test.c
或者
gcc test.o在当前目录下直接生成可执行文件,默认名称为
a.out
选项
-o
1
gcc test.c -o test
在当前目录下生成名为
test
的可执行文件选项
-E
1
gcc -E test.c -o test.i
在当前目录下生成名为
test.i
的预处理文件选项
-S
1
gcc -S test.c -o test.s
在当前目录下生成名为
test.s
的汇编文件,将源码转成汇编代码选项
-c
1
gcc -c test.c
在当前目录下生成名为
test.o
的目标文件选项
-O数字
1
gcc -O1 test.c -o test
在当前目录下生成名为
test
的可执行文件,并且使用编译优化级别1编译程序。可选级别为1~3,级别越大优化效果越好,但编译时间越长。
多文件编译
比如一个汇编文件aaa.s
一个C源文件test.c
:
方式一 多文件同时编译
直接追加文件名进行同时编译输出即可
1
gcc aaa.s test.c -o bbb
如果要编译的文件都在同一个目录下,可以用通配符
gcc *.c -o
来进行编译方式二 多文件分开编译
首先将源文件编译成目标文件
1
2
3gcc -c aaa.s //生成aaa.o
gcc -c test.c //生成test.o然后将所有目标文件连接成可执行文件
1
gcc test.o aaa.o -o test
方式三 编写makefile文件进行编译
第一步
makefile
文件编写1
2
3
4# 我是注释
SRC=aaa.s test.c
main: $(OBJS) #指定需要生成的文件名称以及相应的依赖关系
gcc -o main $(SRC) #生成所需要的指令第二步 使用
bin
包下的cs-make
工具,直接在命令窗口中执行该指令,默认在当前目录虚招makefile文件1
cs-make
该指令实际上执行的就是makefile中我们编写的指令
gcc -o main aaa.s test.c
以上三种方法相比较,第一中方法编译时需要所有文件重新编译,而第二种方法可以只重新编译修改的文件,未修改的文件不用重新编译 ,第三种方法适用于文件较多依赖关系复杂的工程编译
本文为作者原创 转载时请注明出处 谢谢
乱码三千 – 点滴积累 ,欢迎来到乱码三千技术博客站