一、常用函数
1. origin 函数
origin 函数的返回值就是变量来源。使用格式如下:
$(origin <variable>)
使用示例
ifeq ("$(origin V)", "command line")
这里判断变量 V 的来源是不是 command line。
2. filter 函数
$(filter <pattern...>,<text>)
函数功能
以 pattern 模式过滤 text 字符串中的单词,仅保留符合模式 pattern 的单词,可以有多个模式。
函数返回值
函数返回值就是符合pattern 的字符串。
应用示例
$(filter 4.%,$(MAKE_VERSION))
表示 从 字符串 MAKE_VERSION 中找出符合 “4.%” 的字符( % 为通配符),其中MAKE_VERSION 表示 make 的版本号,当前make 的版本号为 4.1,所以这个函数返回字符串:4.1。
3. firstword 函数
$(firstword <text>)
函数用于取出 text 字符串中的第一个单词,函数的返回值就是获取到的单词。
应用示例
VAR1=hello world
test:
@echo 'firstword=' $(firstword $(VAR1))
执行返回结果如下:
firstword= hello
4. words 函数
words 用于统计单词个数。函数格式如下:
$(words <text>)
使用示例如下:
VAR1=hello world hello
test1:
@echo "num:" $(words $(VAR1))
执行 make,输出 num:3
5. patsubst 函数
模式字符串替换函数。使用格式如下:
$(patsubst <pattern> , <replacement> , <text>)
功能
将 中单词(单词以 空格,Tab,回车,换行分割)符合模式 的部分,替换成 。
通配符
可以包括通配符 % ,表示任意长度的字符串。
转义字符
可以用 \ 进行转义。以 \% 来表示真正含义的 % 字符。
使用示例
makefile 文件如下定义
all:
@echo $(patsubst %.c,%.o,bar.c test.c)
执行 make all ,输出
输出 bar.o test.o
二、环境变量
1. MAKECMDGOALS
MAKECMDGOALS 是 make 的一个环境变量,这个变量会保存你所指定的目标列表。
使用示例如下:
test1:
@echo "test1"
test2:
@echo "test2"
all:
@echo "all target list:" $(MAKECMDGOALS)
执行: make test1 test2 all
输出如下:
test1
test2
all target list: test1 test2 all
2. MAKEFLAGS
MAKEFLAGS 用于记录 执行 make 命令时,输入的选项(OPTION)。主makefile 调用其他makefile 时,会自动将 MAKEFLAGS 变量传递过去。
make 的使用规则
make [OPTION]... [TARGET]...
使用示例
主makefile 定义如下:
all:
@echo "main makefile:" $(MAKEFLAGS)
@$(MAKE) -C sub
@$(MAKE) -f ../makefile
sub 目录下的makefile 定义如下:
all:
@echo "sub makefile:" $(MAKEFLAGS)
主目录上一层 makefile 定义如下:
all:
@echo "outside makefile:" $(MAKEFLAGS)
在主目录下 执行: make -ikr
输出如下:
调用其他makefile 文件时,会自动在 命令选项(OPTION )中附加上 -w (--print-directory)选项,用于打印进入和退出调用的makefile 路径,方便调试跟踪问题。
我们也可以使用 选项 --no-print-directory 禁止打印目录信息,也就禁止了自动添加 -w 选项。
例如,在主目录 下执行:
make -ikr --no-print-directory
输出如下:
三、make 命令选项
1. -f
-f FILE, --file=FILE, --makefile=FILE
指定make 程序执行的makefile 文件。默认情况下,在命令行输入 make ,make 程序会在当前目录下寻找 makefile 文件,并执行。
但是当我们要执行的 makefile 文件不在当前目录,或者文件名 不是 “makefile” 时,我们可以用命令选项 -f 指定要执行的makefile 文件。
使用示例如下所示:
make -f ./sub/makefile.build
2. -C
-C DIRECTORY, --directory=DIRECTORY
详情见下面章节
四、与子make 通信
1. 执行子目录makefile
主目录的 makefile 可以使用如下代码来编译子目录:
$(MAKE) -C subdir
作用:进入 subdir 目录,并执行该目录下的 makefile
$(MAKE) 就是调用 make 命令
-C 指定子目录
2. 变量传递
2.1 export
使用 export 来导出要传递给子make 的变量。
export VAR1 VAR2 VAR3
2.2 unexport
使用unexport 声明不导出某个变量给子make
unexport VAR1 VAR2 VAR3
3. 特殊的变量
变量 SHELL 和 MAKEFLAGS 除非使用 unexport 声明,否则的话在整个make的执行过程中,它们的值始终自动传递给子make。
————————————————
版权声明:本文为CSDN博主「gdut_llkkyy」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/gdut_liujiangyi/article/details/129716321
|