cmake
пытается скомпилировать исполняемый файл, используя «стандартные» (согласно тому, что cmake считает стандартными) параметры компилятора, и пытается запустить этот исполняемый файл, чтобы посмотреть, работает ли компилятор.Исполняемый файл прост, обычно такой как int main(int argc) { return argc - 1; }
.
Вы не можете сделать это при кросс-компиляции.Поскольку обычно вы не можете связать правильную стандартную библиотеку C, у вас нет printf
, или _start
, или _exit
или чего-то подобного, передача аргументов в main
определяется реализацией, или вам нужен скрипт компоновщика иливы не можете запустить кросс-скомпилированный исходный код на хосте и т. д. Просто: вы обычно не можете запустить кросс-скомпилированный исполняемый файл на хосте, и большую часть времени даже компиляция достаточно сложна.
Распространенным решением является установка перед project()
:
set(CMAKE_TRY_COMPILE_TARGET_TYPE "STATIC_LIBRARY")
, чтобы cmake попытался скомпилировать статическую библиотеку, а не исполняемый файл, для здесь .Это позволяет избежать запуска компоновщика и предназначено для кросс-компиляции.
Вы можете установить CMAKE_C_COMPILER_WORKS
, и он пропустит проверку по здесь , но я чувствую, что CMAKE_TRY_COMPILE_TARGET_TYPE
более правильнорешение.