专注电子技术学习与研究
当前位置:单片机教程网 >> MCU设计实例 >> 浏览文章

Makefile注意事项

作者:龚平   来源:本站原创   点击数:  更新时间:2014年03月14日   【字体:

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


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

 
    target :  depending 
     <Tab>   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的设计直接决定后期修改的复杂程度,需要加强练习。
关闭窗口

相关文章