【发布时间】:2014-02-06 01:20:01
【问题描述】:
我可以告诉 CMake 将所有来自编译器和/或链接器的 stderr 输出通过外部程序传输并显示在终端上吗?
【问题讨论】:
标签: cmake
我可以告诉 CMake 将所有来自编译器和/或链接器的 stderr 输出通过外部程序传输并显示在终端上吗?
【问题讨论】:
标签: cmake
对于 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,但使用上述配方可以轻松完成更精细的输出过滤。
【讨论】: