linux基础梳理2019.01.22(makefile)

makefile

 

makefile的三要素:

  • 目标
  • 依赖——可以不写
  • 规则命令——可以不写

 

写法:

目标:依赖

tab键规则命令

 

例子:

利用main.c文件调用其余文件中的函数。

实现样例:

 

makefile的弊端:

如果更改其中一个文件,所有的源码都要重新编译。

解决方案:

编译过程分解。先生成 .o 文件,使用 .o 文件来得到成果。

 

要想分解编译过程,先来分析一下编译的原理:

编译的“规则是递推的”,比如下图中的可执行文件 app, 他依赖main.o , add.o 和 div.o 生成。编译时,如果没有main.o 文件,则编译器回去寻找有没有main.o的生成规则。这就是“规则是递推的”

根据规则,我们把上面的makefile重新写一下:

 

makefile中的定义变量

可以定义变量 ObjFiles=main.o add.o sub.o div.o …

变量的使用:$(ObjFiles),$(变量名)

 

 

函数

  • wildcard——可以进行文件匹配
  • patsubst——内容的替换

 

wildcard使用例子:

makefile的隐含规则——默认处理第一个目标,我们需要他处理我们的test目标,测试一下函数的功能,因此可以这样:

make test

 

patsubst的使用例子

 

 

makefile的变量

  • $@  代表目标
  • $^    代表全部依赖
  • $<    第一个依赖
  • $?    第一个变化的依赖

因此上面的第一版makefile可以改成

其中,%表示通配。$@, $<这样的变量,只能在规则中出现。

 

 

makefile清理

  • -f 代表强制执行,不加的话,如果没有对应的文件时,会报错
  • @表示不输出,虽然命令执行了,但是不会在屏幕上体现出来
  • 表示,即使这个命令报错了,也会执行(和 -f的功效类似)

上面的代码存在一个问题——clean的作用是清理,执行clean之后,会产出一个目标文件“clean”。该如何解决这个问题?

使用——.PHONY,定义伪目标,防止歧义

 

多个makefile文件时,如何指定执行哪一个?

执行以下命令即可:

make -f makefile1

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值