本文介绍了在使用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拾取,使其避免进入/离开目录消息。
我是否可以做得更好,并真正避免cd
和cmake -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;行?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!