我在我的一个项目中使用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获取,使其避免进入/离开目录消息。
我可以做得更好吗?实际上可以避免使用cd
和cmake -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 ...
文本之前,此配方中没有出现任何特殊变量、标记或任何内容。
因此,绝对没有办法控制这个特定的食谱是如何打印的,与其他所有食谱的打印方式分开。你要么全部得到,要么一个也得不到。