在使用 cmake 构建时,如何使 make 变得冗长但只有 "meaningful" 行?

How can I get make to be verbose but with only "meaningful" lines when building with cmake?

我在我的项目中使用 CMake 和 GNU Make 生成器,然后想要构建它 - 详细。

我对实际生产东西的线路感兴趣,但对以下线路不感兴趣:

gmake[2]: Entering directory '/some/where'
gmake[2]: Leaving directory '/some/other/place'

也没有说:

cd /some/where && /path/to/cmake/bin/cmake -E cmake_link_script CMakeFiles/some.dir/link.txt --verbose=1

因为它们“包装”了 cmake 运行该脚本时将发生的实际工作(例如调用链接器可执行文件,例如 gcc)。

我不太介意百分比headers例如:

[ 97%] Building CXX object /path/to/proj/CMakeFiles/something.dir/foo.o

即如果您的解决方案删除了​​它们,那么很好,如果它保留了它们 - 也很好。

我已经阅读了关于这个问题的答案和评论:Using CMake with GNU Make: How can I see the exact commands?,到目前为止我想到的最好的是:

MAKEFLAGS="$MAKEFLAGS --no-print-dir" cmake --build build_dir/  --verbose 

--verbose 给你最大的(?)冗长,你不想要的一切。然后,--no-print-dir 被 GNU Make 拾取,使其避免 Entering/Leaving 目录消息。

我可以做得更好,实际上避免 cdcmake -E 命令吗?

备注:

你自己会发现,没有办法如你所愿。

由于 cmake 只是生成 makefile,而 make 实际上是 运行 配方和打印输出,您需要查看 makefile 并了解规则是如何构建的。例如,如果您找到 link 行的示例规则,您将看到它如下所示:

myexecutable: ...
        @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --bold --progress-dir=/mydir/CMakeFiles --progress-num=$(CMAKE_PROGRESS_2) "Linking CXX executable myexecutable"
        cd /mydir && $(CMAKE_COMMAND) -E cmake_link_script CMakeFiles/myexecutable.dir/link.txt --verbose=$(VERBOSE)

请注意,本食谱中 cd /mydir ... 文本之前没有特殊变量、标记或任何内容。

因此,绝对没有办法控制这个特定食谱的打印方式,与所有其他食谱的打印方式分开。您要么获得全部,要么获得 none 个。