让 CMake 使用 gccfilter

2024-01-31

GCC过滤器 http://www.mixtion.org/gccfilter/是一个简洁的 Perl 脚本,允许对 GCC 的输出进行着色,从而使调试变得更加有趣,更重要的是,速度更快。

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

gccfilter -a -c make

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

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

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


您可以使用 CMakegccfilter通过指向规则_启动_编译 http://www.cmake.org/cmake/help/v2.8.10/cmake.html#prop_dir:RULE_LAUNCH_COMPILE属性到调用的包装器脚本gccfilter与所需的选项。

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

#!/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_COMPILEproperty 还可以设置为目标属性或全局属性。

The 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()
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

让 CMake 使用 gccfilter 的相关文章

随机推荐

  • 除括号内的内容外,按空格分割字符串

    我有以下字符串 x lt K05708 K05709 K05710 K00529 K05711 K05712 K05713 K05714 K02554 1 K05708 K05709 K05710 K00529 K05711 K05712
  • 当授权服务器也是资源服务器时如何配置oAuth2

    我正在尝试使用以下任一方法在 Spring Boot 2 x x 中设置非常基本的 oAuth2 身份验证授权码授予 or 隐性授予但在获得令牌后 我似乎无法访问资源服务器 它与授权服务器驻留在同一个 Spring Boot 应用程序中 以
  • 在Python中将字典创建到另一个字典中的语法[重复]

    这个问题在这里已经有答案了 可能的重复 python中将一个列表插入另一个列表的语法 https stackoverflow com questions 3748063 syntax to insert one list into anot
  • 避免 jQuery(预)加载图像

    我有一个 HTML 字符串 用作 jQuery 输入文档 the variable html contains the HTML code jQuery html find p each function index element do
  • 访问在angularjs的另一个模块中定义的工厂

    我们可以从一个模块中调用另一个模块中定义的工厂函数吗 如果是这样 怎么办 假设我的第一个模块定义在moduleOne js文件为 var myModule angular module MyServiceModuleOne myModule
  • 我可以更改 Google 地图嵌入式地图 (iframe) 中的标记吗?

    我知道我可以使用 Google 地图 API 来做到这一点 但您知道是否有办法更改嵌入式 Google 地图中的标记 我想将默认的 A 按钮替换为 B 按钮 http www ideasfestival co uk wp content t
  • 使用 Linq to XML 选择 Xml 节点

    我的 Xml 文件
  • 如何在iPhone中播放m3u8格式

    我有一个网址http stream alayam com alayam alayam playlist m3u8 http stream alayam com alayam alayam playlist m3u8想在iPhone上播放 m
  • 指定要处理的文件到 Perl 一行

    他们给了我一段 Perl 俏皮话 它具有以下形式 perl pe 如何指定程序要处理的文件 有关如何启动的文档perl发现于perlrun http perldoc perl org perlrun html手册页 perl pe i fi
  • 如何捕获当前视图屏幕截图并在代码中重用? (iPhone SDK)

    当用户旋转设备时 我试图从一个 UIView 转换到另一个 UIView 这本身并不困难 但是 由于我在旋转后显示完全不同的内容 因此 UIKit 提供的默认动画 旋转当前显示的视图 在概念上是不合适的 简单地禁用动画并突然交换视图是可以忍
  • ASP.NET Core 在单例服务上调用异步初始化

    我有一个服务 可以通过名为的方法从文件中异步读取一些内容InitAsync public class MyService IService private readonly IDependency injectedDependency pu
  • 使用 python 通过迭代列表创建 XML 文件

    我正在尝试获取一个如下所示的 xml 文件 以便我可以将其导入到 Moodle 成绩册中
  • 如何确定递归代码的Big-O?

    我有以下代码 这是这个问题的答案 https leetcode com problems add digits https leetcode com problems add digits class Solution public int
  • 同一图中连续的 matplotlib 动画

    我有一个算法 它由两个不同的部分组成 我想依次可视化这两个部分 同时可能在动画 2 开始时在屏幕上保留动画 1 的最终状态 我可以通过调用分别可视化这两个部分animation FuncAnimation and plt show 由于这两
  • Heroku 资产文件始终为空

    首先 我做了很多谷歌搜索 甚至让 Heroku 上的东西正常工作 但似乎无论我是让 Heroku 在 slug 编译期间预编译我的资产 还是我自己预编译它们并提交它们 无论哪种方式 我的 Rails 4 应用程序的 application
  • 解码和理解汇编代码

    所以有一点背景 我是 c 和汇编代码的初学者 我们有一个 炸弹 分配 用 c 编写 它调用需要某些密码的方法 但代码不可见 我需要通过查看汇编代码来确定正确的密码 该代码表明此方法的密码是 6 个数字 该密码作为 输入 传递到方法第 2 阶
  • Google 云端硬盘文件 ID 是全球唯一的吗?

    Google 云端硬盘文件 ID 在全球范围内是唯一的吗 UUID 是否有可能使用生成NSUUID类将与 Google 驱动器文件 ID 相同吗 仅供参考 这不是重复的 Google 文档 驱动器资源 ID 是否全局唯一 https sta
  • 如何从转义闭包中更改 inout 参数?

    我试图从转义闭包中修改函数的参数 如下所示 var completion gt Void func addCompletion closure escaping gt Void completion append closure func
  • jQuery 文件上传显示剩余时间?

    嗨我正在使用jQuery 文件上传 https github com blueimp jQuery File Upload wiki 它工作正常 我向用户显示一个进度条 显示上传进度 代码如下 fileupload fileupload p
  • 让 CMake 使用 gccfilter

    GCC过滤器 http www mixtion org gccfilter 是一个简洁的 Perl 脚本 允许对 GCC 的输出进行着色 从而使调试变得更加有趣 更重要的是 速度更快 您可以通过调用 GCCFilter 与 CMake 生成