最近再看专业嵌入式软件设计这本书,总体感觉这本书对工具的介绍非常的详细,看了一下基本的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 .PHONY : all
-
2
-
3 all:
-
4 @mkdir test ;\
-
5 cd test ;\
-
6 mkdir subtest
-
~
[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 .PHONY : all
-
2
-
3 all:
-
4 @mkdir test
-
5 @cd test
-
6 @mkdir subtest
-
~
[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) |