gpt4 book ai didi

gcc - 让 CMake 使用 gccfilter

转载 作者:行者123 更新时间:2023-12-05 01:22:40 62 4
gpt4 key购买 nike

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

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

gccfilter -a -c make

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

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

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

最佳答案

你可以让 CMake 使用 gccfilter通过指向 RULE_LAUNCH_COMPILE属性到调用 gccfilter 的包装脚本与所需的选项。

创建一个名为 gccfilter_wrap 的可执行 shell 脚本在最外层的 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_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()

关于gcc - 让 CMake 使用 gccfilter,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14399984/

62 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com