用于在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")