从GNU make中运行grep

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用于$(错误)函数,而不是在规则命令中.

Bet*_*eta 6

诀窍是通过Make grep 走私特殊字符.

GrepResult := ${shell grep 'ifeq (\$$(Param1)' TextFile}

将$$转换为$,然后grep将\ $转换为$.另请注意,此赋值使用大括号"{}",而不是括号"()",以免混淆匹配的结果.(可能有更强大的方法来处理字符串,但没关系.)

使用结果时,请使用单引号:

all:
    @echo '$(GrepResult)'

这也是用GNUMake 3.81测试的.

编辑: 这也适用于$(错误...):

    $(error '$(GrepResult)')


ank*_*kon 1

你真的需要使用 $(shell) 吗?

GrepResult:= `grep 'ifeq (\$$(Param1)' TextFile`

all:
  echo ${GrepResult}
Run Code Online (Sandbox Code Playgroud)

使用 GNU Make 3.81 进行测试。