用于在makefile中呈现文本的函数

用于在makefile中呈现文本的函数,makefile,Makefile,我创建一个呈现输入文本(参数)的函数 当我称之为功能时 .PHONY : create_odir create_odir: $(call GPrint "create output dir") mkdir ./output_dir 我收到了这个错误信息 kColorRed := "\x1b[0;31m" /bin/sh: line 1: kColorRed: command not found make: *** [../src/sw/m

我创建一个呈现输入文本(参数)的函数

当我称之为功能时

.PHONY : create_odir
create_odir:
    $(call GPrint "create output dir")
    mkdir ./output_dir
我收到了这个错误信息

kColorRed := "\x1b[0;31m"
/bin/sh: line 1: kColorRed: command not found
make: *** [../src/sw/makefile:51: create_odir] Error 127

如何解决此问题?

请参阅下面的代码,这些代码将帮助您解决此问题。
方法1:使用全局变量

# Regular Colors
kColorRed ='\e[0;31m'          # Red
kColorGreen ='\e[0;32m'        # Green
kColorEnd='\e[0m'              # Text Reset

# Color renderning
define GPrint 
    echo -e ${kColorRed}$(1)${kColorEnd}
    echo -e ${kColorGreen}$(1)${kColorEnd}
endef

create_odir:
    $(call GPrint ,"create output dir")
输出

方法2: 如果要在函数中使用局部变量

# Color renderning
define GPrint 
    $(eval kColorRed := '\e[0;31m')
    $(eval kColorGreen := '\e[0;32m')
    $(eval kColorEnd := '\e[0m')
    echo -e $(kColorRed)$(1)$(kColorEnd)
    echo -e $(kColorGreen)$(1)$(kColorEnd)
endef

create_odir:
    $(call GPrint ,"create output dir")

也许是这样:?@curleywei我提供的解决方案对你有效吗?hi@Vroomfondel:我已经应用了你的建议,然后找到了
kColorRed
。但输出文本不会改变颜色。这是因为
make
为配方中的每一行调用单独的shell进程,从而忘记了前几行中的所有内容。我完全忘记了在我的第一次评论中提到这一点,对不起。您可以将整个配方写在一行中,放入
作为命令分隔符或
\
中每行末尾的
定义
标记它作为一行通过
make
传递给shell处理器。似乎无法在
定义中使用局部变量。。。endef有一个解决方案,我们可以在
定义中使用局部变量。。。endef
?@curlywe我现在添加了使用局部变量的示例。它也会给你同样的感觉output@curlywei我提供的解决方案对你有用吗。你好@Altaf:很好!谢谢我建议为
GPrint
中的每个命令添加
@
,否则可能会在终端上显示冗余命令,例如
echo-e
。可以修复方法2中的代码吗?谢谢:)@curlywei,wlecome:-)。也可以使用.SILENT来抑制命令
# Color renderning
define GPrint 
    $(eval kColorRed := '\e[0;31m')
    $(eval kColorGreen := '\e[0;32m')
    $(eval kColorEnd := '\e[0m')
    echo -e $(kColorRed)$(1)$(kColorEnd)
    echo -e $(kColorGreen)$(1)$(kColorEnd)
endef

create_odir:
    $(call GPrint ,"create output dir")