Makefile这些事儿

Makefile项目管理工具

它是一门脚本语言

作用:

1.便于编译管理代码

2.节省编译时间

3.一次编写终身受益(复用性特别强)

 

我们来看一下一个程序执行的过程,.o文件是核心二进制文件,(Linux下是.o ,windows下是.obj)在编译过程中暂存,如果说节省编译时间,主要节省生成核心二进制时间

庞大项目有无数文件生成核心二进制文件,有大量的时间开销,如果说因为你改动了一个很小的改动却导致文件全都编译一遍,那么这个结果对我们来说是非常不好的,所以要用Makefile来节约。

Makefile编译简单,文件的名字可以是Makefile,也可以是makefile,但不能是makefila,或mikefile,

过程

1.创建Makefile文件

2.文件中写入脚本

3.执行make命令解析执行脚本,(在当前文件下寻找makefile文件)

目标 依赖 和命令是makefile的三要素

注意:命令的前面一定要有一个tab 键而不是4个空格,一定要以一个Tab键作为开头。记住,make并不管命令是怎么工作的,他只管执行所定义的命令

 

像下面的例子: all本身并不存在 所以只要执行make或者make all指令的时候都会产生gcc a.c -o app这个生成核心二进制文件的命令 那么makefile不就是没意义了吗?这就涉及到makefile的执行原理了

 

 

 

 

这个时候 makefile是怎么执行的呢?

当有多条makefile语句时执行原理又是怎么样的呢?

Makefile执行原理:

kefile是总结来说:他是

自顶向下分析依赖

自底向上执行命令

make会比较目标文件和依赖文件的修改日期,如果依赖文件的日期要比目标文件的日期要新,或者目标不存在的话,那么,make就会执行后续定义的命令。

现在我们如果有一个main.c文件 里面分别调用了加减乘除函数 我们如果想提高这个代码的复用性的话,可以分别再写4个 add.c  sub.c  mul.c  div.c

由此我们可以写出

-I后面放的是头文件目录

Include中有个test.h

 

 

放的是函数的声明

那么现在我们完成了基本的编写

再加上一些小小的功能

 

clean output install disclean是无依赖功能目标

它就只有

目标名:

(这里是Tab键 不是四个空格)执行的命令(某些功能)

使用方法是:make + 目标名

clean 是编译后消除中间文件临时文件 (给人留下中间文件是很大的安全隐患)

install 是将编译后的程序移动到指定路径/usr/bin 这样你的app可执行程序就可以在任意位置执行了

disclean则是将程序从指定删除并删除配置文件

output 就是用echo输出的一段话了 不要在意这些细节

但是无依赖功能目标有一个缺点 与其同名文件会导致功能目标失效

目标与之对比会不执行命令,就是如果你有一个clean文件 那么make clean则不会生效

所以就有了伪目标!

.PHONY 伪目标 写在makefile最前面 避免目标同名文件影响功能目标的执行,就可以定义伪目标忽略同名文件

最后结果就如下图,

这只是一些最简单的应用,可能一些小的demo还可以用上,但是实际应用中没人会这么写,因为他的复用性还不够强,下次再说吧。

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值