【发布时间】:2021-12-17 23:11:09
【问题描述】:
我在我的一个项目中使用带有 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
即如果您的解决方案删除了它们,那么很好,如果它保留它们 - 也很好。
我已经阅读了这个问题的答案和 cmets: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 配置之后,一切都必须通过命令行完成。
【问题讨论】:
-
我确定
MAKEFLAGS+="--no-print-dir"是一个错字,而您的意思是MAKEFLAGS="--no-print-dir"。 -
@MadScientist:嗯,这取决于我的 MAKEFLAGS 中是否还有其他东西,但没关系。
-
这是我使用 Ninja 的原因号 #289465。
-
POSIX shell 没有定义任何像
+=这样的操作符;使用它是一个语法错误。在保留预先存在的值的同时编写它的可移植方式是MAKEFLAGS="$MAKEFLAGS --no-print-dir"。一些 shell(如 bash)确实支持+=作为特定的运算符,而另一些则不支持。 -
没有特别的理由必须打印这些行:这就是 cmake 决定生成其 makefile 的方式。 cmake 可以很容易地生成在这里做得更好的 makefile,而且我确信 cmake 可以(甚至可以)生成不能完全按照某些人想要的方式工作的 ninja 文件。
标签: cmake build gnu-make verbose verbosity