jac*_*hab 6 regex grep makefile
我需要使用grep 找到文本'ifeq($(Param1)'.我尝试将搜索结果分配给make变量.问题是单引号不会在make中转义文本,所以当我尝试时:
GrepResult:= $(shell grep 'ifeq ($$(Param1)' TextFile)
Run Code Online (Sandbox Code Playgroud)
我明白了:
Makefile:214: *** unterminated call to function `shell': missing `)'. Stop.
Run Code Online (Sandbox Code Playgroud)
$可以使用$$进行转义,但如何在make中转义括号?谢谢.
注意:$ GrepResult用于$(错误)函数,而不是在规则命令中.
诀窍是通过Make 和 grep 走私特殊字符.
GrepResult := ${shell grep 'ifeq (\$$(Param1)' TextFile}
将$$转换为$,然后grep将\ $转换为$.另请注意,此赋值使用大括号"{}",而不是括号"()",以免混淆匹配的结果.(可能有更强大的方法来处理字符串,但没关系.)
使用结果时,请使用单引号:
all:
@echo '$(GrepResult)'
这也是用GNUMake 3.81测试的.
编辑: 这也适用于$(错误...):
$(error '$(GrepResult)')
你真的需要使用 $(shell) 吗?
GrepResult:= `grep 'ifeq (\$$(Param1)' TextFile`
all:
echo ${GrepResult}
Run Code Online (Sandbox Code Playgroud)
使用 GNU Make 3.81 进行测试。
| 归档时间: |
|
| 查看次数: |
6526 次 |
| 最近记录: |