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

时间:2015-02-17 20:23:34

标签: php android makefile output

我一直试图让dumpvar.mk的输出以彩色打印,就像我们的其他构建输出一样,但是dumpvar正在打印$(info rather than echo -e ${color}

$(info SUPERUSER_EMBEDDED=$(SUPERUSER_EMBEDDED))

我的其他makefile将使用以下命令打印输出:

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

1 个答案:

答案 0 :(得分:0)

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

\e转义(从^[)可以看到echo -e '\e' | cat -v等等。

如果可以直接输出原始代码,则不需要通过转义序列。

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

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

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

$(info $(shell tput setaf 6)Foo Bar$(shell tput sgr0))

sgr0关闭所有属性(将颜色重置为默认值等)。

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))