从 GNU make 中运行 grep
我需要使用 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 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
诀窍是通过 Make 和 grep 走私特殊字符。
Make 将 $$ 转换为 $,然后 grep 将 \$ 转换为 $。另请注意,此赋值使用大括号“{}”,而不是括号“()”,以免与匹配结果混淆。 (可能有更强大的方法来处理字符串,但没关系。)
当您使用结果时,请使用单引号:
这也已使用 GNUMake 3.81 进行了测试。
编辑:
这也适用于 $(error...):
The trick is to smuggle the special characters past Make and grep.
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:
This too was tested with GNUMake 3.81.
EDIT:
This also works with $(error...):
你真的需要使用 $(shell) 吗?
使用 GNU Make 3.81 进行测试。
Do you really need to use $(shell) ?
Tested with GNU Make 3.81.