Php .mk文件$(信息定义)的颜色输出

Php .mk文件$(信息定义)的颜色输出,php,android,makefile,output,Php,Android,Makefile,Output,我一直在尝试让dumpvar.mk的输出像我们构建输出的其他部分一样以彩色打印,但是dumpvar使用$(信息而不是echo-e${color} $(info SUPERUSER_EMBEDDED=$(SUPERUSER_EMBEDDED)) 我的其他makefiles将使用以下命令打印输出: echo -e ${CL_CYN}"SUPERUSER_EMBEDDED=$SUPERUSER_EMBEDDED"${CL_RST} 编写脚本以使dumpvar以彩色打印信息的最佳方式是什么 ifne

我一直在尝试让
dumpvar.mk
的输出像我们构建输出的其他部分一样以彩色打印,但是
dumpvar
使用
$(信息而不是echo-e${color}

$(info SUPERUSER_EMBEDDED=$(SUPERUSER_EMBEDDED))
我的其他makefiles将使用以下命令打印输出:

echo -e ${CL_CYN}"SUPERUSER_EMBEDDED=$SUPERUSER_EMBEDDED"${CL_RST}
编写脚本以使dumpvar以彩色打印信息的最佳方式是什么

ifneq ($(PRINT_BUILD_CONFIG),)
HOST_OS_EXTRA:=$(shell python -c "import platform; print(platform.platform())")
$(info ============================================)
$(info   PLATFORM_VERSION_CODENAME=$(PLATFORM_VERSION_CODENAME))
$(info   PLATFORM_VERSION=$(PLATFORM_VERSION))
$(info   TARGET_PRODUCT=$(TARGET_PRODUCT))
$(info   TARGET_PRODUCT_VERSION=$(PRODUCT_VERSION))
$(info   TARGET_BUILD_VARIANT=$(TARGET_BUILD_VARIANT))
$(info   TARGET_BUILD_TYPE=$(TARGET_BUILD_TYPE))
$(info   TARGET_BUILD_APPS=$(TARGET_BUILD_APPS))
$(info   TARGET_ARCH=$(TARGET_ARCH))
$(info   TARGET_ARCH_VARIANT=$(TARGET_ARCH_VARIANT))
$(info   TARGET_CPU_VARIANT=$(TARGET_CPU_VARIANT))
$(info   TARGET_GCC_VERSION=$(TARGET_GCC_VERSION))
ifneq ($(TARGET_KERNEL_CUSTOM_TOOLCHAIN),)
$(info   TARGET_KERNEL_CUSTOM_TOOLCHAIN=$(TARGET_KERNEL_CUSTOM_TOOLCHAIN))
ifneq ($(TARGET_KERNEL_CUSTOM_EABI),)
$(info   TARGET_KERNEL_CUSTOM_EABI=$(TARGET_KERNEL_CUSTOM_EABI))
endif
else
$(info   TARGET_TOOLCHAIN=$(ARM_EABI_TOOLCHAIN))
endif
$(info   SUPERUSER_EMBEDDED=$(SUPERUSER_EMBEDDED))
$(info   HOST_ARCH=$(HOST_ARCH))
$(info   HOST_OS=$(HOST_OS))
$(info   HOST_OS_EXTRA=$(HOST_OS_EXTRA))
$(info   HOST_BUILD_TYPE=$(HOST_BUILD_TYPE))
$(info   BUILD_ID=$(BUILD_ID))
$(info   BUILD_NUMBER=$(BUILD_NUMBER))
$(info   OUT_DIR=$(OUT_DIR))
ifneq ($(USE_CCACHE),)
ifneq ($(CCACHE_DIR),)
$(info   CCACHE_DIR=$(CCACHE_DIR))
else
CCACHE_DIR := .ccache
$(info   CCACHE_DIR=$(CCACHE_BASEDIR)$(CCACHE_DIR))
$(info   CCACHE_BASE_DIR=$(CCACHE_BASEDIR))
endif
endif
$(info ============================================)
目标是向输出中添加一些颜色定义,使其更具可读性

在我的Makefile中,我将颜色定义为:

ifneq ($(BUILD_WITH_COLORS),0)
  CL_RED="\033[31m"
  CL_GRN="\033[32m"
  CL_YLW="\033[33m"
  CL_BLU="\033[34m"
  CL_MAG="\033[35m"
  CL_CYN="\033[36m"
  CL_RST="\033[0m"
endif

echo-e
没有做任何神奇的事情,它只是将“转义序列”转换成原始输出,然后由终端进行解释

\e
是escape(从
echo-e'\e'| cat-v
中可以看到它是
^[
),等等

也就是说,如果可以直接输出原始代码,就不需要经历转义序列

tput
命令(通过查找当前终端的正确代码)为您请求的控制序列执行此操作

因此,假设
CL\u CYN
类似于
\e[36m
,那么相关的
tput
命令将是
tput setaf 6
(将前景命令设置为颜色6)

tput
输出原始序列,以便您能够以任何方式将其显示出来。因此,您可以将其直接嵌入到
$(info)
调用中,它将起作用

$(info $(shell tput setaf 6)Foo Bar$(shell tput sgr0))
sgr0
关闭所有属性(将颜色重置为默认值等)


CL\u-CYN
CL\u-RST
从哪里来?它们的内容是什么?这很完美,正是我想做的。您可以将这些shell命令的结果存储在
CL\u
变量中,而不是转义字符串中,然后同样使用它们。像CL\u-CYN=“$(shell tput setaf 6)”一样存储?我尝试了这种组合,但没有太多成功是的,只是没有引号。它们在shell中不需要(虽然shell会删除它们),在make中也不需要它们(make会将它们留在那里)。那怎么办?CL_CYN=$(shell tput setaf 6)和CL_CYN=“$(shell tput setaf 6)”当与$(info$(CL_CYN)FOO一起使用时,不要给出彩色输出。除非我像$(info$(shell tput setaf 6)FOO那样直接添加颜色定义,否则结果就是白色的
CL_RED=$(shell tput setaf 1)
CL_CYN=$(shell tput setaf 6)
CL_RST=$(shell tput sgr0)
$(info $(CL_CYN)FOO $(CL_RED)BAR$(CL_RST))