有没有办法从 CMake 生成的构建系统中的工具(如
gcc
和 make
)生成彩色输出(例如诊断消息和状态消息)?
CMAKE_COLOR_DIAGNOSTICS
变量。请点击该链接获取最新版本的文档。以下是 3.24.2 文档中的引用:
全程启用颜色诊断。
该变量使用三种状态:
、ON
且未定义。OFF
未定义时:
变量初始化为CMAKE_COLOR_MAKEFILE
。它控制颜色构建系统消息。ON
GNU/Clang 编译器不会使用任何颜色诊断标志来调用。
当
时:ON
Makefile Generators 默认生成颜色构建系统消息。
未初始化,但可以显式设置为CMAKE_COLOR_MAKEFILE
以禁用颜色构建系统消息。OFF
使用启用颜色诊断的标志来调用 GNU/Clang 编译器 (
)。-fcolor-diagnostics
当
时:OFF
Makefile Generators 默认情况下不生成颜色构建系统消息。
未初始化,但可以显式设置为CMAKE_COLOR_MAKEFILE
以启用颜色构建系统消息。ON
使用禁用颜色诊断的标志来调用 GNU/Clang 编译器 (
)。-fno-color-diagnostics
环境变量,则使用其值。否则,默认情况下不会定义CMAKE_COLOR_DIAGNOSTICS
。CMAKE_COLOR_DIAGNOSTICS
现在不需要其他工具了。 GCC 和 Clang 生成颜色输出,但当它们检测到它们正在像 CMake Makefiles 使用的管道中使用时隐藏它。不过他们有标志来强制颜色。
CMakeLists.txt
:
if("${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU")
add_compile_options(-fdiagnostics-color=always)
elseif("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang")
add_compile_options(-fcolor-diagnostics)
endif()
如果您有时通过管道传输 make 的输出,则可以将其放在标志后面。
颜色输出预览:
参考: https://medium.com/@alasher/colored-c-compiler-output-with-ninja-clang-gcc-10bfe7f2b949
下载gccfilter(需要perl、libregexp和libgetopt-argvfile),然后运行:
gccfilter -c cmake ...
这将使构建过程中的消息着色(我假设是 gcc 消息)。
尝试 colout,它旨在为任何命令的输出无缝着色,并附带 g++ 和 cmake 主题,您可以一起使用:
make something 2>&1 | colout -t cmake | colout -t g++
除了改进 cmake 颜色方案之外,它甚至在 g++ 打印的代码上应用了 syntax coloring。
基于此讨论我在
~/.bashrc
中为make
创建了一个别名:
alias make="make VERBOSE=1 2>&1 | sed -e 's%^.*: error: .*$%\x1b[37;41m&\x1b[m%' -e 's%^.*: warning: .*$%\x1b[30;43m&\x1b[m%'"
这不是一个很好的解决方案,但它确实有效。