.mk 文件的颜色输出 $(信息定义
color output for the .mk file $(info definition
我一直在尝试让 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="3[31m"
CL_GRN="3[32m"
CL_YLW="3[33m"
CL_BLU="3[34m"
CL_MAG="3[35m"
CL_CYN="3[36m"
CL_RST="3[0m"
endif
echo -e
并没有做任何神奇的事情,它只是将 "escape sequences" 转换为终端随后解释的原始输出。
\e
是escape(从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))
我一直在尝试让 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="3[31m"
CL_GRN="3[32m"
CL_YLW="3[33m"
CL_BLU="3[34m"
CL_MAG="3[35m"
CL_CYN="3[36m"
CL_RST="3[0m"
endif
echo -e
并没有做任何神奇的事情,它只是将 "escape sequences" 转换为终端随后解释的原始输出。
\e
是escape(从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))