一个更简单的解决方案可能只是使用 CMake 的内置功能来发出彩色输出,即这些命令
不同的颜色
cmake -E cmake_echo_color --normal hello
cmake -E cmake_echo_color --black hello
cmake -E cmake_echo_color --red hello
cmake -E cmake_echo_color --green hello
cmake -E cmake_echo_color --yellow hello
cmake -E cmake_echo_color --blue hello
cmake -E cmake_echo_color --magenta hello
cmake -E cmake_echo_color --cyan hello
cmake -E cmake_echo_color --white hello
粗体文字
cmake -E cmake_echo_color --red --bold hello
没有新行
cmake -E cmake_echo_color --red --no-newline hello
在 CMake 中,您可以使用execute_process()
命令调用${CMAKE_COMMAND}
. 您可以为此编写一个方便的函数。
更新:cmake_echo_color
与execute_process()
正如@sjm324 运行所指出的
execute_process(COMMAND ${CMAKE_COMMAND} -E cmake_echo_color --red --bold hello)
不起作用。查看实现https://github.com/Kitware/CMake/blob/10371cd6dcfc1bf601fa3e715734dbe66199e2e4/Source/kwsys/Terminal.c#L160
我的猜测是标准输出没有附加到终端,因此当 CMake 内部调用isatty()
它时失败。
我有两个技巧可以解决这个问题,但如果你真的关心这个,你应该联系 CMake 开发人员以获得一个不那么脆弱的解决方案
HACK 1:设置CLICOLOR_FORCE=1
环境变量。
execute_process(COMMAND
${CMAKE_COMMAND} -E env CLICOLOR_FORCE=1
${CMAKE_COMMAND} -E cmake_echo_color --red --bold hello
)
这不是一个好主意。如果您将构建的输出记录到文件中,它将在其中包含转义序列,因为您强制它们始终被发出。
HACK 2:将 OUTPUT_FILE 设置为 TTY
不要这样做。HACK 1 可能更便携。
execute_process(COMMAND
/usr/bin/tty
OUTPUT_VARIABLE TTY_NAME
OUTPUT_STRIP_TRAILING_WHITESPACE)
execute_process(COMMAND
${CMAKE_COMMAND} -E cmake_echo_color --red --bold hello
OUTPUT_FILE ${TTY_NAME})