本文介绍了在使用cmake构建时,如何让make变得冗长但只有&q;有意义的&q;行?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在对我的一个项目使用带有GNU make生成器的CMake,然后想详细地构建它。

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

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)时将发生的实际工作。

我不太介意百分比标题,例如:

[ 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拾取,使其避免进入/离开目录消息。

我是否可以做得更好,并真正避免cdcmake -E命令?

备注:

  • 我意识到我可以使用最大的冗长,然后使用grep进行过滤。这不是我想要的--我希望从一开始就不要发出这些行。
  • 不能将任何内容硬编码到CMakeLists.txt文件中;所有操作都必须在CMake配置之后通过命令行完成。

推荐答案

您自己会发现没有办法做您想做的事情。

由于cmake只是生成生成的Make文件,而实际上运行配方并打印输出的是make,因此您需要查看Makefile并了解规则是如何构造的。例如,如果您找到链接行的示例规则,您将看到它如下所示:

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 ...文本之前没有出现特殊变量、标记或任何内容。

因此,完全没有办法控制这个特定食谱的打印方式,而不是所有其他食谱的打印方式。你要么全部得到,要么一个都不得到。

这篇关于在使用cmake构建时,如何让make变得冗长但只有&q;有意义的&q;行?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

10-31 03:49