CMake 我可以通过另一个程序过滤编译器输出吗

标签 cmake

我可以告诉 CMake 通过外部程序从编译器和/或链接器输出所有 stderr 输出,并在终端上显示输出吗?

最佳答案

对于 Makefile 生成器,您可以通过为编译规则设置自定义启动器来将过滤器应用于编译器输出。以下 CMake 列表文件概述了必要的步骤:

cmake_minimum_required(VERSION 2.8)

project (Main)

configure_file(
    "${PROJECT_SOURCE_DIR}/gcc_filter.sh.in"
    "${PROJECT_BINARY_DIR}/gcc_filter.sh"
    @ONLY)

add_executable (Main Main.cpp)

set_property(GLOBAL PROPERTY RULE_LAUNCH_COMPILE "${PROJECT_BINARY_DIR}/gcc_filter.sh")

在项目根目录下添加如下shell脚本模板文件gcc_filter.sh.in:

#!/bin/sh

# shell script invoked with the following arguments
# $(CXX) $(CXX_DEFINES) $(CXX_FLAGS) -o OBJECT_FILE -c SOURCE_FILE

# invoke compiler
exec "$@" 2>&1 | "@PROJECT_SOURCE_DIR@/myfilter.sh"

自定义启动器规则调用的实际 shell 脚本首先通过 CMake 列表文件中的 configure_file 调用复制到项目二进制目录。必须设置文件 gcc_filter.sh.in 的可执行位。 shell 脚本将所有参数转发给编译器,然后将编译器输出通过管道传输到项目根目录中的另一个 shell 脚本 myfilter.sh:

#!/bin/sh
exec wc

示例 myfilter.sh 只是调用了 wc 但使用上述方法可以轻松完成更精细的输出过滤。

关于CMake 我可以通过另一个程序过滤编译器输出吗,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21592167/

相关文章:

c++ - 如何在我的 g++ 编译器中满足 C++ 标准版本?

installation - 在 CMake 中,如何在目标安装后运行脚本?

c - 使用 CMake 时链接 PETSc 程序时出现的问题

c++ - CPack:从子目录(googletest 目录)中排除安装命令

xcode - 我怎样才能让 CMake 创建一个 xcode 项目,在系统头文件中抑制警告?

使用 CMake 将具有给定扩展名的所有文件复制到输出目录

cmake ctest生成

CMake 为发布、调试等提供条件

c++ - 使用 CMake 和 clang 在 Windows 上构建一个简单的 C++ 项目

opencv - find_package() - 如果可用则使用旧版本,否则使用新版本