make使用总结(5)-Makefile语法
通配符
为了方便字符串的处理,make也支持一些通配符。在规则中通配符会被自动展开,但在变量定义和函数引用时,通配符将会失效。此时如果需要使用通配符就要使用wildcard
函数。详见此函数。
*
:匹配任意长度的任意字符.(注意:匹配文件名,无法匹配 makefile 文件中的规则等字段)?
:匹配单个任意字符。[...]
:匹配括号中指定的任意一个字符。~
:代表当前用户目录。
使用例程如下,变量定义在变量定义时使用通配符*.c
获取当前目录下所有后缀名为.c
的文件:
SRCS := $(wildcard *.c)
include命令
稍微复杂点的项目工程,一般都会使用多个Makefile文件。其中子目录中的Makefile文件(通常命名为Make.defs)包含文件的组织信息,而在根目录的Makefile中使用include
导入各个子目录Makefile的文件信息。
include
指示符可以让make读入其指定的文件。include指定文件时可以支持通配符。当make识别到include指令时,会暂停读入当前的makefile文件,并转而读入include指定的文件,之后再继续读取本文件的剩余内容。include指示符所指示的文件名可以是任何shell能够识别的文件名,这表明include还可以支持包含通配符的文件名.eg:include ./makefile_dir/inc_*
.
当include
指示符包含的文件不包含绝对路径,make会按以下优先级寻找文件:
- 当前路径
1.-I
指定的目录.如make -I ./makefile_dir/
- /usr/gnu/include
- /usr/local/include
- /usr/include
tip:
- include指示符所指示的文件名如果使用通配符,include的
-I
选项指定的路径达不到预期效果。 - include指示符包含的文件与当前makefile共享变量。也就是说include指示符包含的文件可以直接修改makefile中的变量。
- 使用include包含文件时,如果文件不存在,make会发生错误。如果想让make继续执行,可以使用
-
让make忽略该指令的错误。如-include ./xxx/make.defs
.
条件判断
在可裁剪的工程中,条件判断是必不可少的。make提供了ifeq
和ifneq
判断指令。
ifeq
用于判断条件是否相等,语法如下
ifeq (ARG1, ARG2)
...
endif
ifneq格式与ifeq相同,逻辑上与ifneq相反。ifeq/ifneq等关键字后面一定要接一个空格,否则make会因为无法识别关键字而报错!使用例程如下:
ifeq ($(CONFIG_WINDOWS_NATIVE),y)
rm -rf *.o
endif
关于技术交流
此处后的文字已经和题目内容无关,可以不看。
qq群:825695030
微信公众号:嵌入式的日常
如果上面的文章对你有用,欢迎打赏、点赞、评论。