(一)使用gcc直接编译C语言程序
1.利用gcc来完成简单C语言编译
我们以编写简单的“hello world”为例,我们可以利用vi或vim命令来完成代码的编写。
代码如下
利用gcc完成完成编译及运行
2.gcc编译的原理和过程(以“hello.c"为例)
利用gcc命令将C语言文件转化为可执行文件需要执行四个步骤,分别是预处理(Preprocessing)、编译(Compilation)、汇编(Assembly)和链接(Linking)。
1.预处理是对源代码的头文件以及预编译语句(如宏定义的define)进行编译。生成的文件后缀名为.i,命令如下 。
打开hello.i文件
我们可以看到主函数以上的头文件已经进行了编译。
2.编译是针对汇编语言的步骤,检查代码以及将其翻译成汇编语言,生成的文件后缀名为.s,命令如下。
打开hello.s文件
可以看到源代码已经转化为了汇编语言。
3.汇编的作用是生成目标文件,文件的后缀名为.o,命令如下
hello.o文件打开我们会看见一堆乱码,是因为汇编产生的是一个二进制文件,但是它是不可以执行的,所以就需要最后一步。
4.链接是将目标文件转化为可执行文件,命令如下
5.最后就可以执行文件了
3.利用gcc完成两个文件的编译
编写main2.c
编写sub1.h
执行命令 gcc main2.c sub1.h -o main 将两个文件一起编译,并生成可执行文件main,然后用命令 ./main 执行它。
(二)在window平台上进行编译
工具:Dev-c++
编写main.c
编写sub1.h
编译运行
(三)使用Makefile编译C程序
在Ubuntu系统中用gcc编译程序有一个很大的弊端,假如我们编写了许多文件,但发现其中由一两个文件需要更改,只用gcc就需要所有的文件重新编译一遍,这样就会让简单的编译过程复杂化。这是,我们就可以运用到Linux中一个重要的工具make,它最大的特点就是可以自动化编译,这个工具是用户自己去定义文件makefile,在其中写上各个文件之间的关系,在使用命令make就可以把上述复杂的编译步骤一步到位。下面就来介绍一下有关make和makefile的有关知识。
1.编写makefile的规则
目标文件:依赖文件
<TAB> 编译命令
2.编写代码
编写main2.c
编写sub1.h
编写sub2.c
3.使用makefile进行编译
使用vi创建makefile文件
输入make命令调用并执行makefile
执行文件jewe
可以看到我们只用了一个make命令就完成了编译并产生了一个可以正确执行的文件jewe。
(四)总结
这次在Ubuntu上编译C语言的实验中,我学到两种全新的编译工具gcc和makefile,以及如何在Linux系统中编译C语言文件。在window上简单快捷的编译过程,让我对编译这一过程一直都无法明白它的原理和过程。在学习完gcc后让我对编译这一过程有了更深入的理解,它并不像在window中的那样可以一步到位,而是分成了预处理、编译、汇编、链接这四个步骤。这无疑会对我后面C语言的学习有极大帮助。而在后面我也发现了gcc在编译是的弊端,就是在面对多个文件时,万一源代码出现了错误,就需要重复麻烦的编译,这时候自动编译工具make就起到了极大作用,它只需要将代码关系和命令写进makefile文件里面,前面重复复杂的编译工作就只需要一个简单的make命令就能解决。