初学者学习路上的gcc与Makefile

在linux平台上,最常用的编译系统就是gcc。在使用gcc编译程序时,编译程序可以被分为四个阶段:

第一步:预处理(所有以#开头头的文件都展开)                              操作命令:gcc -E test.c -o test.i;

第二步:编译    (语法检查)                                                               操作命令:gcc -S test.i -o test.s;

第三步:汇编    (把汇编语句翻译成CPU可识别的二进制文件)  操作命令:gcc -c tset.s -o test.o;

第四步:链接    (把test.o文件和函数数据库文件链接在一起)          操作命令:gcc test.o -o test;

           这时输入“./test”即可执行该文件。

gcc遵循的在本文章中的部分规则:    .c为后缀的文件,C语言源代码文件;
                                                                    .i 为后缀的文件,是已经预处理过的C源代码文件;
                                                                    .o为后缀的文件,是编译后的目标文件;
                                                                    .s为后缀的文件,是汇编语言源代码文件;

以上是使用gcc进行编译的步骤,然而在实际的开发过程中,仅仅使用gcc命令对程序进行编译是非常低效的,主要有下面两个原因:

(1)每个程序往往都是由多个源文件组成,源文件数量越多,执行的时间就会越长,此外,各种编译规则也会大大加深gcc命令行的复杂度,所以开发调试程序过程中,通过gcc命令来执行编译程序是很麻烦的。

(2)在整个开发过程中,调试工作占了整体工作量的一大半,在使用gcc开发调试过程中,使用gcc会把没有修改的源文件一起编译,这样会影响编译的效率。

为了提高编译效率,这就谈到了标题中所写的另一个Make工程管理器中Makefile文件。makef文件执行分为下面三个步骤:

(1)需要生成的目标文件(target file);

(2)生成目标文件所需要的依赖文件(dependency file);

(3)生成目标文件的编译规则命令行(command);

make是如何工作的:

1. 输入make,make会在当前目录下寻找“Makefile”或者“makefile”一般来说最好写成“Makefile”。

2. 如果找到,它会找文件中的第一个目标文件(target),在上面的例子中,他会找到“test”这个文件,并把这个文件作为最终的目标文件。

3. 如果test文件不存在,或是test所依赖的后面的 test.o 文件的文件修改时间要比test这个文件新,那么,他就会执行后面所定义的命令来生成test这个文件。

4. 如果edit所依赖的test.o文件也存在,那么make会在当前文件中找目标为test.o文件的依赖性,如果找到则再根据那一个规则生成test.o文件。

5. make会生成test.o 文件,然后再用test.o 文件声明make的终极任务,也就是执行文件test了。

编写Makefile文件:(注:object代表变量)

1 CC = gcc

2 target = test

3 object = test.o

4 $(target):$(object)

5 $(CC) $(object) -o $(target)

再输入运行命令make即可完成编译。

清空目标文件规则:

最稳得做法是

PHONY:clean

clean:rm -rf  test  $(object)

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值