findstring
函数在 Makefile
中的作用
在 Makefile
中,findstring
是一个内置的字符串操作函数,它用于在一个字符串中查找另一个子字符串。如果找到了子字符串,它会返回该子字符串,否则返回空字符串。
语法
1 | findstring <substring>, <string> |
- **
<substring>
**:你要查找的子字符串。 - **
<string>
**:你要搜索的字符串。
返回值
- 如果
substring
在string
中找到了,findstring
会返回substring
。 - 如果没有找到,返回空字符串。
例子
假设你有如下的 Makefile
:
1 | VAR = abcdef |
在这个例子中:
VAR = abcdef
变量包含了字符串abcdef
。$(findstring abc, $(VAR))
会查找abc
是否存在于abcdef
中。- 由于
abc
确实出现在abcdef
中,findstring
会返回abc
,然后将其赋值给RESULT
。
运行 make
会输出:
1 | abc |
另一个例子
如果你查找一个不存在的子字符串:
1 | VAR = abcdef |
在这个例子中:
$(findstring xyz, $(VAR))
会查找xyz
是否存在于abcdef
中。- 由于
xyz
不在abcdef
中,findstring
返回的是空字符串。
运行 make
会输出:
1 |
(没有输出,因为结果是空字符串)
用途
findstring
函数通常用于条件判断、字符串匹配和过滤。例如,可以根据某个子字符串来决定是否执行某个规则,或者根据给定的条件修改变量值。
示例 1:根据条件选择操作
你可以使用 findstring
来检查变量是否包含某些标志,并根据检查结果做不同的事情。
1 | DEBUG_FLAGS = -g -O2 |
findstring -g, $(DEBUG_FLAGS)
会查找-g
是否在DEBUG_FLAGS
中。- 如果找到了
-g
,就会给CFLAGS
变量添加-DDEBUG
。 - 这是一种在
Makefile
中进行条件编译的方式。
示例 2:用 findstring
筛选标志
1 | FLAGS = -g -O2 |
- 这个例子中,
findstring
会查找-g
是否在FLAGS
中。如果找到了,就将-g
赋值给CFLAGS
。 - 如果
FLAGS
包含-g
,则输出-g
;否则输出空字符串。
findstring
和 filter
的区别
findstring
和 filter
都是用来处理字符串的,但它们有一些不同:
findstring <substring>, <string>
:查找一个子字符串,如果找到了就返回该子字符串,否则返回空字符串。filter <pattern>, <string>
:与findstring
类似,但可以匹配多个子字符串(使用模式匹配),并返回所有匹配的子字符串。
例如:
1 | VAR = foo bar baz |
输出是:
1 | bar |
如果你需要检查多个子字符串,可以使用 filter
来匹配多个模式,而 findstring
更适用于检查单一子字符串。
总结
findstring <substring>, <string>
:在string
中查找substring
,如果找到则返回substring
,否则返回空字符串。- 常用于在
Makefile
中进行条件判断、字符串匹配和变量修改。 - 与
filter
不同,findstring
只能查找单个子字符串,而filter
可以处理模式匹配并返回多个结果。
本文作者:
ICXNM-ZLin
本文链接: https://talent-tudou.github.io/2024/12/28/makefile/Makefile-findstring函数/
版权声明: 本作品采用 CC BY-NC-SA 4.0 进行许可。转载请注明出处!
本文链接: https://talent-tudou.github.io/2024/12/28/makefile/Makefile-findstring函数/
版权声明: 本作品采用 CC BY-NC-SA 4.0 进行许可。转载请注明出处!