从 GNU make 中运行 grep

发布于 2024-08-09 06:03:10 字数 393 浏览 2 评论 0原文

我需要使用 grep 查找文本 'ifeq ($(Param1)' 。我尝试将搜索结果分配给 make 变量。问题是单引号不会转义 make 中的文本,所以当我尝试:

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

我得到:

Makefile:214: *** unterminated call to function `shell': missing `)'.  Stop.

$ 可以用 $$ 转义,但如何在 make 中转义括号? 谢谢。

注意:$GrepResult 用于 $(error) 函数,而不是规则命令。

I need to find the text 'ifeq ($(Param1)' using grep. I try to assign search result to make variable. The problem is that single quotes don't escape text in make so when I try:

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

I get:

Makefile:214: *** unterminated call to function `shell': missing `)'.  Stop.

The $ can be escaped with $$ but how do I escape parentheses in make?
Thanks.

NB: $GrepResult is used in $(error) function, not in a rule command.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

末蓝 2024-08-16 06:03:10

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

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

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

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

all:
    @echo '$(GrepResult)'

这也已使用 GNUMake 3.81 进行了测试。

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

    $(error '$(GrepResult)')

The trick is to smuggle the special characters past Make and grep.

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

Make turns $$ into $, then grep turns \$ into $. Also note that this assignment uses curly braces "{}", not parentheses "()", so as not to be confused by the results of the match. (There may be a more robust way to handle the string, but never mind.)

When you use the result, use single quotes:

all:
    @echo '$(GrepResult)'

This too was tested with GNUMake 3.81.

EDIT:
This also works with $(error...):

    $(error '$(GrepResult)')
反目相谮 2024-08-16 06:03:10

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

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

all:
  echo ${GrepResult}

使用 GNU Make 3.81 进行测试。

Do you really need to use $(shell) ?

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

all:
  echo ${GrepResult}

Tested with GNU Make 3.81.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文