在使用 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 目录消息。
我可以做得更好,实际上避免 cd
和 cmake -E
命令吗?
备注:
- 我意识到我可以使用最大详细程度,然后使用 grep 进行过滤。那不是我想要的 - 我不希望首先发出线条。
- 没有东西可以hard-coded进入
CMakeLists.txt
文件;在 CMake 配置后,一切都必须通过 command-line 完成。
你自己会发现,没有办法如你所愿。
由于 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 个。
我在我的项目中使用 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 目录消息。
我可以做得更好,实际上避免 cd
和 cmake -E
命令吗?
备注:
- 我意识到我可以使用最大详细程度,然后使用 grep 进行过滤。那不是我想要的 - 我不希望首先发出线条。
- 没有东西可以hard-coded进入
CMakeLists.txt
文件;在 CMake 配置后,一切都必须通过 command-line 完成。
你自己会发现,没有办法如你所愿。
由于 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 个。