如何在makefile函数中传递逗号字符

时间:2019-04-23 06:55:43

标签: shell makefile

在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中逗号用逗号分隔,但是如何使它可打印。 我使用了不同的转义字符组合来将逗号作为文本消息传递给\, /, $$, ',' ","这样的文本消息,但没有任何效果

3 个答案:

答案 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)。

免责声明:本文来自我的博客。