★★★★★ 是小夏啊!
我们知道,当我们用像VS等这样的编译器写完代码后,会通过快捷键操作或是编译器上相应的选项来编译运行,紧接着我们一般通过控制面板来观察程序运行的结果,从而判断自己写的程序代码是否满足要求,进而对其进行Debug,修改代码直至输出达到预期目标。
那么有这么几个值得我们思考的问题:VS等编译器是如何将程序代码转换成可执行程序的?在企业中广受喜爱的Linux操作系统下又是怎样的?对于Linux操作系统中gcc/g++是如何使用的?
目录
四、Linux项目自动化构建工具-make/Makefile
一、背景知识
1、预处理(头文件展开、去注释、条件编译、进行宏替换等)
[xxp@VM-24-3-centos lesson1]$ gcc -E test.c -o test.i
[xxp@VM-24-3-centos lesson1]$ ls
install.sh test.c test.i
★ 预处理功能主要包括宏定义,文件包含,条件编译,去注释等。
★ 实例: gcc –E test.c –o test.i。
★ 选项“-E”,该选项的作用是让 gcc 在预处理结束后停止编译过程。
★ 选项“-o”是指目标文件,“.i”文件为已经过预处理的C原始程序。
2、编译(生成汇编,汇编语言也需要编译,也有汇编编译器)
[xxp@VM-24-3-centos lesson1]$ gcc -S test.i -o test.s
[xxp@VM-24-3-centos lesson1]$ ls
install.sh test.c test.i test.s
★ 在这个阶段中,gcc 首先要检查代码的规范性、是否有语法错误等,以确定代码的实际要做的工作, 在检查无误后,gcc 把代码翻译成汇编语言。
★ 用户可以使用“-S”选项来进行查看,该选项只进行编译而不进行汇编,生成汇编代码。
★ 实例: gcc –S test.i –o test.s。
3、汇编(生成机器可识别代码)
[xxp@VM-24-3-centos lesson1]$ gcc -c test.s -o test.o
[xxp@VM-24-3-centos lesson1]$ ls
install.sh test.c test.i test.o test.s
★ 汇编阶段是把编译阶段生成的“.s”文件转成目标文件。
★ 读者在此可使用选项“-c”就可看到汇编代码已转化为“.o”的二进制目标代码了。
★ 实例: gcc –c test.s –o test.o。
4、链接(生成可执行文件或库文件)
[xxp@VM-24-3-centos lesson1]$ gcc test.o -o test
[xxp@VM-24-3-centos lesson1]$ ls
install.sh test test.c test.i test.o test.s
★ 在成功编译之后,就进入了链接阶段。
★ 实例: gcc hello.o –o