码迷,mamicode.com
首页 > 其他好文 > 详细

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

时间:2014-08-17 21:22:32      阅读:181      评论:0      收藏:0      [点我收藏+]

标签: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





 

工程化管理Makefile的学习(一),布布扣,bubuko.com

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

标签:makefile   嵌入式软件   

原文地址:http://blog.csdn.net/chen22075x/article/details/38640519

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!