在Makefile中定义了一个print
函数,该函数将打印文本作为参数,然后进行打印。
我的问题是如何将逗号字符作为文本部分进行打印?
例如,下面是相关的makefile部分,其中的逗号不可打印。
print = echo '$(1)'
help:
@$(call print, He lives in Paris, does not he?)
现在,如果运行makefile,如:
$ make help
它打印
$ He lives in Paris
代替
$ He lives in Paris, does not he?
我知道在makefile中逗号用逗号分隔,但是如何使它可打印。
我使用了不同的转义字符组合来将逗号作为文本消息传递给\,
/,
$$,
','
","
这样的文本消息,但没有任何效果
答案 0 :(得分:1)
如here所述:
逗号和不匹配的括号或大括号不能出现在所写参数的文本中;如前所述,前导空格不能出现在第一个参数的文本中。可以通过变量替换将这些字符放入参数值。
如此:
print = echo '$(1)'
comma:= ,
help:
@$(call print,He lives in Paris$(comma) does not he?)
答案 1 :(得分:0)
您可以执行以下操作:
print = echo '$(1)' | sed 's/(\(.*\))/\1/'
help:
@$(call print, (He lives in Paris, does not he?))
输出变为:
$ make help
He lives in Paris, does not he?
如果在字符串中包含括号,则必须对sed
中的正则表达式进行调整。
答案 2 :(得分:-1)
如果您想在参数中包含括号,您可以使用更复杂的 sed 脚本来去除括号。
define print
echo "`echo \"$(1)\" | sed -e 's/^(\|)$$//g'`";
endef
help:
@$(call print,(He lives in Paris, does not he? in a (house) with parenthesis inside))
基本上你应该用 echo \"$(1)\" | sed -e 's/^(\|)$$//g'
改变 $(1)。
免责声明:本文来自我的博客。