工程化管理Makefile的学习(一)

引言:

      Makefile是嵌入式软件开发环境中的智能管家,尤其面对文件数量达到数十个以上的项目时,利用它可为我们构造高效的项目编译系统,从而显著的提高项目的开发效率和后期更新维护,同时也可以增强代码的重复利用率。

学习Makefile首先明确3个重要概念

1、目标(Target):指运行make后生成的目标文件。

2、依赖关系(Dependency):指明目标文件与其他文件、中间目标文件的依赖关系;其中被依赖的目标又称为依赖目标的先决条件(Prerequisite)。

3、命令(Command):告诉Makefile如何生成目标。

编写Makefile文件之前,首先要熟悉文件之间的依赖关系,可用UML构建一个"依赖树", 然后再利用Makefile中变量、函数按照规则表达依赖树即可。

今天就学习下里面经常用到的变量:

.PHONY:xxx 其中xxx为伪目标,一般命名为clean, 其主要作用就是避免文件列表中的文件名与clean重名,造成无法重新make.

自动变量:

$@: 用于表示一个规则中的目标。 当一个规则中有多个目标时, $@所指的是其中任何造成规则命令被运行的目标。

$^  :表示的是规则中的所有先决条件。

$< :标识规则中的第一个先决条件。

特殊变量:

MAKE——表示当前处理Makefile的命令名是什么。

MAKECMDGOALS——表示当前构建的目标名。

注意运行make时可以同时指定多个目标,当make获得了多个目标以后, 将以从左到右的顺序逐个地构建目标。


变量的类别和赋值:

变量的类别分为两大类:

1、递归扩展变量——只用一个“=”定义的变量称为递归扩展变量(Recursively expanded varible), 对该类变量的引用是递归的。

2、简单扩展变量——用“:=”定义的变量是称为简单扩展变量(Simple expanded varible), 对该类变量make只做一次展开。

同时Makefile中也可以实现条件赋值和追加赋值

条件赋值“?=” :变量没有定义时就将等号右边的值赋给变量;如果已经定义则不改变变量原值;

追加赋值“+=”:  example 

.PHONY:clean

objects = main.o fun1.o
objects += fun2.o<pre name="code" class="cpp">clean:
    rm objects

 



 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值