如何获得CMake的详细输出?

时间:2017-08-24 10:04:30

标签: cmake

我想调查一下为什么会出现这个错误:

$ cmake ..
-- The C compiler identification is unknown
-- The CXX compiler identification is GNU 5.4.0
-- Check for working C compiler: /cygdrive/c/Users/Ycr/Home/bin/arm-none-eabi-gcc
-- Check for working C compiler: /cygdrive/c/Users/Ycr/Home/bin/arm-none-eabi-gcc -- broken
CMake Error at /usr/share/cmake-3.6.2/Modules/CMakeTestCCompiler.cmake:61 (message):
  The C compiler "/cygdrive/c/Users/Ycr/Home/bin/arm-none-eabi-gcc" is not
  able to compile a simple test program.

不幸的是在错误之后:

  • 我不知道CMake做了什么。我没有详细记录它执行的命令。
  • 错误后清除CMakeFiles/cmTC_e4aa4.dir,因此我无法自行探讨此问题。

我该如何调查此类错误?

我尝试使用--debug-trycompile选项。这次CMake创建了一个CMakeTmp文件夹,完美无误。但是,我仍然有CMakeFiles/cmTC_e4aa4.dir生成错误,甚至使用选项CMake取消链接文件夹。

2 个答案:

答案 0 :(得分:2)

获取详细日志

CMake在开始时调用编译器的try_compile()调用,在控制台上提供详细的错误输出并将其写入

[your binary output directory]/CMakeFiles/CMakeError.log

我再次检查了源代码,并且没有CMake选项可以为CMake的内部try_compile()调用提供更详细的输出。

您可以通过在CMakeLists.txt来电之前向主project()添加一些variable_watch()来强制输出为标准输出,如:

variable_watch(__CMAKE_C_COMPILER_OUTPUT)
variable_watch(__CMAKE_CXX_COMPILER_OUTPUT)

保留临时文件

要保留try_compile的临时文件,请将--debug-trycompile添加到cmake命令行。

但请注意,开头的多个编译器测试会覆盖以前的多个工件:

  然而,它可能会改变try-compiles的结果,因为之前的try-compile中的旧垃圾可能导致不同的测试无法正确通过或失败。此选项最适用于一次一次try-compile,并且仅在调试时使用。

参考

答案 1 :(得分:1)

对我来说,即使使用try_compile(),输出目录中的日志文件也没有包含--debug-trycompile的有用信息。

我最终使用了OUTPUT_VARIABLE选项来捕获并打印输出,如下所示:

try_compile(<options> OUTPUT_VARIABLE TRY_COMPILE_OUTPUT)

message(WARNING ${TRY_COMPILE_OUTPUT})