4

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

您可以通过调用将 GCCFilter 与 CMake 生成的 Makefile 一起使用

gccfilter -a -c make

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

问题:有没有办法编写一些 CMake 模块来搜索gccfilter编译器是否为gcc,检查是否COLOR_CXX已设置(很容易到这里),然后告诉 CMake 替换对gccby 的所有调用gccfilter -a -c gcc

CMake 提供了变量CMAKE_CXX_COMPILER,但更改此变量将不允许 CMake 找到正确的包含路径等。project()在每次调用之前添加前缀的命令之后,我们可能会更改一些变量gcc吗?

4

1 回答 1

6

您可以通过将RULE_LAUNCH_COMPILEgccfilter属性指向使用所需选项调用的包装脚本来使用 CMake。gccfilter

gccfilter_wrap在最外层的 CMake 项目目录中创建一个可执行的 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 生成器。


蒂洛编辑

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

# 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()
于 2013-01-19T13:40:24.677 回答