Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1891645
  • 博文数量: 152
  • 博客积分: 3730
  • 博客等级: 上尉
  • 技术积分: 3710
  • 用 户 组: 普通用户
  • 注册时间: 2011-06-02 14:36
个人简介

减肥,运动,学习,进步...

文章分类

全部博文(152)

文章存档

2016年(14)

2015年(17)

2014年(16)

2013年(4)

2012年(66)

2011年(35)

分类: LINUX

2012-01-08 21:57:58

最近再看专业嵌入式软件设计这本书,总体感觉这本书对工具的介绍非常的详细,看了一下基本的Makefile编程,将书上的几个重点总结一下。

首先,Makefile就是一个管理器。
1、在Makefile中主要是由规则构成。
每一个规则都是由三个部分构成:

    target :  depending 
        command

每一个规则都是这三部分组成,当然也不一定全部存在。 

2、在规则中的每一条命令,make都是在一个新的shell上运行。如果希望多个命令在同一个shell中运行,可以用“;”将这些命令连接起来。当命令很长时,可以采用“\”将一个命令分成多行书写。

基本的实例如下:
[gong@Gong-Computer Makefile]$ ls 
complicated  Makefile  Makefile1  simple
[gong@Gong-Computer Makefile]$ vi Makefile
  1.   1 .PHONY : all
  2.   2
  3.   3 all:
  4.   4 @mkdir test ;\
  5.   5 cd test ;\
  6.   6 mkdir subtest
  7. ~
[gong@Gong-Computer Makefile]$ make
[gong@Gong-Computer Makefile]$ ls
complicated  Makefile  Makefile1  simple  test
[gong@Gong-Computer Makefile]$ cd test/
[gong@Gong-Computer test]$ ls 
subtest
[gong@Gong-Computer test]$ 
从上面的结果可以知道,所有的操作是在同一个shell中,而不是每一个命令一个新的shell。如果将Makefile改成下面的形式就会出现不一样的结果.
  1.   1 .PHONY : all
  2.   2
  3.   3 all:
  4.   4 @mkdir test
  5.   5 @cd test
  6.   6 @mkdir subtest
  7. ~
[gong@Gong-Computer Makefile]$ ls 
complicated  Makefile  Makefile1  simple
[gong@Gong-Computer Makefile]$ make
[gong@Gong-Computer Makefile]$ ls 
complicated  Makefile  Makefile1  simple  subtest  test
从上面的实验效果可以知道上面的三个命令并不是在同一个shell中执行,而是分别不同的shell,导致了与我们期望的结果存在差别。
因此在实际的多个命令时一定要记得加上";"和“\”,不然得到的结果就会出现异样。

3、适当的运用函数可以简化Makefile的设计。主要的集合函数主要是abspath,addprefix(加前缀), addsuffix(加后缀),eval ,filter(得到某一类文件名),filter-out(去除某一类文件名),notdir(找到路劲中的文件名),patsubst(常用的替代函数),realpath,wildcard(找到当前工作目录下的文件名或者目录名)。

4、Makfile的设计直接决定后期修改的复杂程度,需要加强练习。
阅读(3149) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~