如何获得 CMake 的详细输出?

now*_*wox 6 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.
Run Code Online (Sandbox Code Playgroud)

不幸的是,错误发生后:

  • 我不知道 CMake 做了什么。我没有它执行的命令的详细日志。
  • 错误发生后已CMakeFiles/cmTC_e4aa4.dir被清理,因此我无法自己探索该问题。

我应该如何调查这样的错误?

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

Flo*_*ian 5

获取详细日志

CMake 在开始时执行的用于测试编译器的调用try_compile(),在控制台上给出详细的错误输出并将其写入

[your binary output directory]/CMakeFiles/CMakeError.log
Run Code Online (Sandbox Code Playgroud)

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

您可以通过在调用之前添加一些variable_watch()对 main 的调用来强制输出到标准输出,例如:CMakeLists.txtproject()

variable_watch(__CMAKE_C_COMPILER_OUTPUT)
variable_watch(__CMAKE_CXX_COMPILER_OUTPUT)
Run Code Online (Sandbox Code Playgroud)

保留临时文件

要保留 的临时文件try_compile,请添加--debug-trycompilecmake命令行。

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

但是,它可能会更改尝试编译的结果,因为先前尝试编译的旧垃圾可能会导致不同的测试错误地通过或失败。此选项最适合一次尝试编译一次,并且仅在调试时使用。

参考


归档时间:

查看次数:

14887 次

最近记录:

5 年,8 月 前