我正在做一个在Linux上用CMake构建的大型C++项目。CMake运行良好,在模块和应用程序树中生成了一大堆Makefiles。运行GNU make
会导致链接器错误。如何让make
在运行命令之前打印出确切的命令?
-d选项不会打印命令,但会打印大量没有帮助的信息。
-n选项会打印所有命令,但不会运行它们,所以我不能确切地说出问题所在。检查来自make -n的标准输出,我没有看到任何相关的命令。我怀疑一些命令会根据之前命令的结果而改变,并且Makefiles的层次结构使得我们很难知道到底发生了什么。
在make的手册页中,我看不到任何其他有用的选项。
发布于 2011-01-27 02:21:42
我相当确定这将会起作用:
make VERBOSE=1
您还应该能够将其添加到您的CMakeLists.txt中,以永久设置:
set(CMAKE_VERBOSE_MAKEFILE on)
CMake FAQ中介绍了这一点。
发布于 2012-06-08 01:31:14
对于automake生成的Makefile,请尝试:
make V=1
发布于 2018-08-23 04:39:11
一个适用于GNU make并适用于任何Makefile的选项,无论是否由CMake生成,都可以使用--trace
选项来生成。这将打印出make
正在执行的命令,并且仍然在执行它们。
这适用于所有命令,而不仅仅是那些在CMake/ V=1
生成的makefile中VERBOSE=1
或V=1
触发打印的命令。
在Linux上的另一种选择是以strace -f -e trace=execve make <make options>
的身份在strace下运行make。strace的输出将包括执行的每个进程: make、make的shell脚本等等。
例如,您可能会发现CMake生成的makefile执行/usr/bin/cmake -E __run_co_compile <lots of options ...>
,但仍然想知道这将运行的确切编译器调用是什么。您可以使用strace方法来实现此目的。
https://stackoverflow.com/questions/4808303
复制相似问题