使CMake使用gccfilter

时间:2013-01-18 13:29:22

标签: gcc cmake gccfilter

GCCFilter是一个简洁的perl脚本,可以为GCC的输出着色,从而使调试更有趣,更重要的是,更快。

您可以通过调用

将GCCFilter与CMake生成的Makefile一起使用
gccfilter -a -c make

然而,这种方法有一些缺点:CMake状态信息的延迟输出,CMake命令中没有颜色是最明显的。

问题:如果编译器是gccfilter,有没有办法编写一些搜索gcc的CMake模块,检查是否设置COLOR_CXX(相当容易到此处) )然后告诉CMake将gcc的所有来电替换为gccfilter -a -c gcc

CMake提供变量CMAKE_CXX_COMPILER,但更改此变量将禁止CMake找到正确的包含路径等。是否有一些变量我们可能会在每次调用project()之前的gcc命令之后更改?

1 个答案:

答案 0 :(得分:5)

您可以通过将RULE_LAUNCH_COMPILE属性指向一个包装脚本来使CMake使用gccfilter,该脚本会调用带有所需选项的gccfilter

在最外面的CMake项目目录中创建一个名为gccfilter_wrap的可执行shell脚本,其中包含以下内容:

#!/bin/sh
exec gccfilter -a -c "$@"

确保设置文件的可执行位。然后在CMakeLists.txt中,在添加目标之前设置RULE_LAUNCH_COMPILE目录属性:

project (HelloWorld)

set_directory_properties(PROPERTIES RULE_LAUNCH_COMPILE
   "${PROJECT_SOURCE_DIR}/gccfilter_wrap")

add_executable(HelloWorld HelloWorld.cpp)

生成的makefile规则将在每个编译器调用前加上gccfilter_wrap脚本。或者,RULE_LAUNCH_COMPILE属性也可以设置为目标属性或全局属性。

RULE_LAUNCH_COMPILE属性仅适用于基于Makefile的CMake生成器。


由Thilo编辑

这就是我最终解决问题的方法 - 基本上是这个解决方案的改写版本:

# GCCFilter, if appliciable
if(CMAKE_COMPILER_IS_GNUCXX OR CMAKE_COMPILER_IS_GNUCPP)
  option(COLOR_GCC "Use GCCFilter to color compiler output messages" ON)
  set(COLOR_GCC_OPTIONS "-c -r -w" CACHE STRING "Arguments that are passed to gccfilter when output coloring is switchend on. Defaults to -c -r -w.")
  if(COLOR_GCC)
    set_property(GLOBAL PROPERTY RULE_LAUNCH_COMPILE "${PROJECT_SOURCE_DIR}/cmake/gccfilter ${COLOR_GCC_OPTIONS}")
  endif()
endif()