我想调查一下为什么会出现这个错误:
$ 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.
不幸的是在错误之后:
CMakeFiles/cmTC_e4aa4.dir
,因此我无法自行探讨此问题。我该如何调查此类错误?
我尝试使用--debug-trycompile
选项。这次CMake创建了一个CMakeTmp
文件夹,完美无误。但是,我仍然有CMakeFiles/cmTC_e4aa4.dir
生成错误,甚至使用选项CMake取消链接文件夹。
答案 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})