Makefile简单总结

目录

 

一、引入

二、Makefile简介

三、Makefile基本结构

四、简单的Makefile实现

参考文章


一、引入

比如我们需要在linux中运行一个test.c文件,shell命令的常见方法是:

1.进入所在目录,编译文件中已有的c文件test.c.

gcc test.c -o test

2.编译完成,生成了名为test的可执行文件,直接运行

./test

我们可以发现这样需要多次命令操作,当需要执行多个c文件的时候,显然造成了精力的分散和浪费,也增大了出错的可能性。

因此我们引入makefile,makefile是用来编译链接文件的,实现了自动化编译。与make指令搭配,一条make指令就完成了整个工程完全自动编译,极大的提高了软件开发的效率。
在编程的时候,我们也可以把一个完整程序的每个函数分离出来,写成.c文件,最后再一起编译和链接。这样有利于程序功能模块化,也方便检查代码错误。

二、Makefile简介

makefile关系到了整个工程的编译规则。一个工程中的源文件不计数,其按类型、功能、模块分别放在若干个目录中,makefile定义了一系列的规则来指定,哪些文件需要先编译,哪些文件需要后编译,哪些文件需要重新编译,甚至于进行更复杂的功能操作,因为makefile就像一个Shell脚本一样,其中也可以执行操作系统的命令。makefile带来的好处就是——“自动化编译”,一旦写好,只需要一个make命令,整个工程完全自动编译,极大的提高了软件开发的效率。make是一个命令工具,是一个解释makefile中指令的命令工具,一般来说,大多数的IDE都有这个命令,比如:Delphi的make,Visual C++的nmake,Linux下GNU的make。

我们可以简单的把makefile认为是一份定义了源文件间依赖关系、如何编译各个源文件并生成可执行文件的说明书。

三、Makefile基本结构

TARGET... : PREREQUISITES...
    COMMAND
    ...
    ...

TARGET:规则的目标,最终生成文件的名字或者是中间过程文件名,也可以是make执行的动作的名称。

PREREQUISITES:规则的依赖,生成目标所必须的文件名列表。

COMMAND:规则的命令。规则需要执行的动作

注意:makefile中使用的必须是TAB键,使用空格会报错!

四、简单的Makefile实现

我们把开头提到的案例用Makefile进行简单实现。

1.创建Makefile 文件。命令行输入vim Makefile命令

2.编译执行。命令行输入make命令,生成文件。

./test  //执行程序

这里简单说明一下在Makefile文件中一定要将每一个.c文件按执行顺序先编译成.o文件,再按顺序将.o文件编译成可执行文件。而每次编译过后会产生很多的.o文件,对于程序运行没什么太大意义,反而会占内存,所以我们也可以在Makefile文件中添加清除命令(clean),如:

.PHONY:clean
clean:                删除所有文件类型为.o的文件
    rm  –rf   *.o

 .PHONY:clean

PHONY:目标并非实际的文件名,只是显示在请求时执行命令的名字。一般有两大理由使用PHONY目标:避免和文件名冲突,改善性能。如果有.PHONY:clean,外面也有clean文件,执行make clean时,里面的.o文件会被删除而外面的clean文件还在。确保了外面clean文件的安全性。如果没有.PHONY:clean 语句,外面也没有clean文件时,在执行make clean也会删除.o文件,如果外面有clean,则会报错。

 

参考文章

makefile学习之路——makefile简介

跟我一起写Makefile​​​​​​​

Linux下多个.c文件的编译和Makefile文件

需要更详细的Makefile文章推荐参考跟我一起写Makefile,内容特别详实。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值