цветной вывод для файла .mk $ (определение информации

Я пытался получить вывод dumpvar.mk печатать в цвете, как и остальные наши выходные данные сборки, но dumpvar печатает с $(info rather than echo -e ${color}

$(info SUPERUSER_EMBEDDED=$(SUPERUSER_EMBEDDED))

другие мои make-файлы будут печатать вывод с помощью команд вроде:

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

2

Решение

echo -e не делая ничего волшебного, он просто преобразует «escape-последовательности» в необработанный вывод, который терминал затем интерпретирует.

\e является побег (который ^[ как вы можете видеть из echo -e '\e' | cat -v), так далее.

При этом вам не нужно проходить через escape-последовательности, если вы можете напрямую выводить необработанные коды.

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

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]