使CMake使用gccfilter

Thi*_*ilo 3 gcc cmake gccfilter

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

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

gccfilter -a -c make
Run Code Online (Sandbox Code Playgroud)

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

问题:是否有写一些CMake的模块,搜索的方式gccfilter,如果编译器是gcc,如果检查,说COLOR_CXX是设置(相当容易了这里),然后告诉CMake的,以取代所有调用gccgccfilter -a -c gcc.

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

sak*_*kra 5

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

gccfilter_wrap使用以下内容创建在最外层CMake项目目录中命名的可执行shell脚本:

#!/bin/sh
exec gccfilter -a -c "$@"
Run Code Online (Sandbox Code Playgroud)

务必设置文件的可执行位.然后在您的添加目标之前CMakeLists.txt设置RULE_LAUNCH_COMPILE目录属性:

project (HelloWorld)

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

add_executable(HelloWorld HelloWorld.cpp)
Run Code Online (Sandbox Code Playgroud)

然后,生成的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()
Run Code Online (Sandbox Code Playgroud)

  • 奇迹般有效.但是,脚本并不是必需的,可以在CMake中完成.我编辑了你的帖子以添加我的最终解决方案 - 希望你不介意. (2认同)