CMake,编译过程中不要打印目录

6

我最近将我的项目更新到了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

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


1
据我所知,打印此内容的代码在这里,该行是 description << "Building " << lang << " object $out";,似乎 $out 是对象的相对路径,然后未经修改地传递给 gcc。因此,我不希望找到针对此的配置选项。你是在寻找在 cmake 输出中应用某种过滤器(在终端中)的类型吗? - Hugues M.
1
请看:https://dev59.com/8WHVa4cB1Zd3GeqPpLDB - sakra
1个回答

2

正如@Hugues Moreau所评论的那样,这些文本直接编码到CMake中,无法修改。

你可以通过将全局RULE_MESSAGES属性设置为OFF并添加自己的echo调用来仅抑制输出,而不使用另一个脚本解析您的命令行或输出。

注意:

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

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)

参考文献:

这将输出替换为“Building C object A.cpp.o”。但它不会保留开头的“[%14]”进度。 - jyn
哦,抱歉,你在你的回答中提到了这个。 - jyn

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接