【问题标题】:CMake , don't print directory when compiling processCMake,编译过程中不打印目录
【发布时间】:2017-05-10 21:42:38
【问题描述】:

我最近将我的项目更新为 CMake,有一件事很烦人。在构建源文件时,它会打印保存目标文件的目录。

[ 13%] Building CXX object a/CMakeFiles/a.dir/src/A.cpp.o
[ 14%] Building CXX object b/CMakeFiles/b.dir/src/B.cpp.o
[ 15%] Building CXX object c/CMakeFiles/c.dir/src/C.cpp.o

我想变成这样

[ 13%] Building CXX object A.cpp.o
[ 14%] Building CXX object B.cpp.o
[ 15%] Building CXX object C.cpp.o

我找不到任何关于此的信息。

【问题讨论】:

  • AFAIK 打印此代码的一段代码是here,行是description << "Building " << lang << " object $out";,似乎$out 是对象的相对路径,然后未经修改地传递给gcc。所以我不希望找到一个配置选项。您是否正在寻找一种过滤器(在您的终端中)应用于 cmake 输出?

标签: cmake


【解决方案1】:

作为@Hugues Moreau commented,这些文本直接编码到 CMake 中,无法修改。

您可以 - 无需使用其他脚本来解析您的命令行或输出 - 仅通过将全局 RULE_MESSAGES 属性设置为 OFF 并添加您自己的 echo 调用来抑制输出。

注意:

  1. 它也省略了百分比和颜色信息
  2. 仅适用于Makefiles generators

CMakeLists.txt

cmake_minimum_required(VERSION 2.8)

project(HelloWorld)

if(CMAKE_GENERATOR MATCHES "Makefiles")
    set_property(GLOBAL PROPERTY RULE_MESSAGES OFF)
    set(
        CMAKE_CXX_COMPILE_OBJECT 
        "$(CMAKE_COMMAND) -E echo Building <LANGUAGE> object $(@F)" 
        "${CMAKE_CXX_COMPILE_OBJECT}"
    )
endif()    

add_executable(HelloWorld main.cpp)

参考文献

【讨论】:

  • 这会将输出替换为“构建 C 对象 A.cpp.o”。但是它不会在开始时保持[ %14] 进度。
  • 哦,哎呀,您在回答中提到了这一点。
猜你喜欢
  • 2011-03-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-03-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多