分类: 嵌入式
2016-05-27 17:00:33
make是一个命令工具,是一个解释makefile中指令的命令工具
1.
伪指令include
该伪指令类似C语言中的#include,它允许一次编写常用的定义并包括它。include伪指令必须在一行中,第一个元素必须是include,并且跟一个要包含的文件名,如:
include default.mk
由于伪目标的特性是,总是被执行的
2.
Phony目标并非实际的文件名:只是在显式请求时执行命令的名字。有两种理由需要使用phony目标:避免和同名文件冲突,改善性能。
已知phony目标并非是由其它文件生成的实际文件,make会跳过隐含规则搜索。这就是声明phony目标会改善性能的原因,即使你并不担心实际文件存在与否.
缺省目标是makefile中的第一个目标,通常将这个phony目标叫做’all’,其依赖文件为各个程序:
Phony它用来指定一个假想的工作目标,也就是说它后面的并不是一个实际文件,而且肯定要视为未更新(也就是说条件总是满足,需要处理)
3.
在写某个目标依赖的条件时,往往需要到源码中查看信息。如main.o、girls.o、boys.o依赖的头文件,这中看源码的方式很容易出错,还有就是当为程序写好了Makefile,而源码改变了头文件依赖关系,需要重新写Makefile(还有可能忘记更新Makefile)。为了解决这个问题,可以在Makefile中用gcc -M选项自动生成目标文件和源文件的依赖关系。如果不需要输出与程序相关的系统头文件则用gcc -MM选项。
4.
在Makefile中,规则的顺序是很重要的,因为,Makefile中只应该有一个最终目标
,一般来说,定义在Makefile中的目标可能会有很多,但是第一条规则中的目标将被确立为最终的目标。如果第一条规则中的目标有很多个,那么,第一个目标会成为最终的目标。make所完成的也就是这个目标。
5.
makefile中的规则描述如何生成特定的文件,即规则的目标。规则列出了目标的依赖文件,指定生成或更新目标的命令。规则的次序是不重要的,除非是确定缺省目标:缺省目标是第一个makefile中的第一个规则;如果第一个规则有多个目标,第一个目标是缺省的。有两个例外:以’.’开头的目标不是缺省目标;模式规则对缺省目标没有影响。通常我们所写的地一个规则是编译整个或makefile中指定的所有程序。
6
.C_MODULE_SRCS = $(wildcard ./*.c)
CSRC_OBJS = $(patsubst %.c, %.o, $(C_MODULE_SRCS))
注:$(C_MODULE_SRCS)变量要用括号括起来