Cmake 如何将命令附加到编译器/链接器/存档命令

Cmake 如何将命令附加到编译器/链接器/存档命令,cmake,ninja,Cmake,Ninja,我想通过管道将标准输出从编译器命令传输到一个实用程序,该实用程序在命令控制台中为警告、错误等着色 SET(CMAKE_C_COMPILE_OBJECT "<CMAKE_C_COMPILER> -c -MD -MF=<OBJECT>.d <DEFINES> <INCLUDES> <FLAGS> <SOURCE> -o <OBJECT> | color.exe") 您是否尝试过创建一个脚本来执行此操作,并在配置期间

我想通过管道将标准输出从编译器命令传输到一个实用程序,该实用程序在命令控制台中为警告、错误等着色

SET(CMAKE_C_COMPILE_OBJECT "<CMAKE_C_COMPILER> -c -MD -MF=<OBJECT>.d <DEFINES> <INCLUDES> <FLAGS> <SOURCE> -o <OBJECT> | color.exe")

您是否尝试过创建一个脚本来执行此操作,并在配置期间将其设置为
CMAKE\u C\u编译器
选项(例如,将其作为参数传递给带有
-D
选项的CMAKE)?我在编写问题时考虑过添加
cmd/C
(我认为这基本上应该与您的建议相同)。当我复制粘贴并手动运行时,生成的ninja命令,
cmd/c2>&1 |
完美地为构建输出着色,但在运行ninja时,它将保持不着色。可能是因为
stdout
被忍者抓取或重定向了吗?在你的问题中,你提到你想过在调用CMake的脚本中这样做。我建议将编译器调用捆绑在一个脚本中,传递所提供的任何参数,然后将其用作
CMAKE\u C\u编译器
。我相信生成器规则只会调用该脚本。对于@compor造成的混乱,我深表歉意。现在编译器调用(由ninja调用)的前面是
cmd/c
,它应该允许shell解释(根据(第172行)的建议),Ninja在不向智能终端写入时会删除所有ansi转义码。这可能是我在运行Ninja时看不到着色的原因。不过,我不知道智能终端是如何确定的。
SET_PROPERTY(GLOBAL PROPERTY RULE_LAUNCH_COMPILE "cmd /c") 
SET(CMAKE_C_COMPILE_OBJECT "${CMAKE_C_COMPILE_OBJECT} 2>&1 | ${GCOLOR} -f")