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



我在我的一个项目中使用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(。

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

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

也就是说,如果你的解决方案去除了它们,那就好了,如果它保留了它们,也没关系。

我已经阅读了关于这个问题的答案和评论:将CMake与GNU Make一起使用:我如何才能看到确切的命令?,到目前为止,我想到的最好的是:

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

--verbose给了你最大限度的冗长,包含了你不想要的一切。然后,--no-print-dir由GNUMake获取,使其避免进入/离开目录消息。

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

注:

  • 我意识到我可以使用最大的详细度,然后使用grep进行过滤。这不是我想要的——我希望这些线一开始就不会被发射出去
  • 不可以将任何内容硬编码到CMakeLists.txt文件中;在CMake配置之后,一切都必须通过命令行完成

你可以自己发现,没有办法做你想做的事。

由于cmake只是生成makefile,而实际上是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 ...文本之前,此配方中没有出现任何特殊变量、标记或任何内容。

因此,绝对没有办法控制这个特定的食谱是如何打印的,与其他所有食谱的打印方式分开。你要么全部得到,要么一个也得不到。

最新更新