Как частично отключить проверку пользовательского компилятора cmake C/C++

Я пытаюсь сделать кросс-компиляцию с помощью cmake. Некоторые из них просты со всеми примерами в Интернете, мне удалось кросс-компилировать мою библиотеку в Linux (x86 и ARM), Windows и Android. Но сейчас я хотел бы сделать это на специальной платформе.

Процесс, который мне нужен для достижения:

  1. Sourcing мое окружение (это разрушит все предыдущие классические окружения bash)
  2. Компилировать с помощью cmake
  3. Выполнить то, что я хочу

Но Cmake проверяет символы в моих пользовательских библиотеках C/C++, которые не позволяют моей библиотеке компилироваться. У меня есть ошибки, которые делают некоторые версии GLIBCXX и CXXABI (без проблем с C), но не все.

Есть ли способ сделать cmake нормально с этим?

РЕДАКТИРОВАТЬ:

Я пытался с помощью:

set(CMAKE_C_COMPILER_WORKS TRUE)
set(CMAKE_CXX_COMPILER_WORKS TRUE)

И с:

include(CMakeForceCompiler)
...
cmake_force_c_compiler(${ENV_PATH}/bin/${CC})
cmake_force_cxx_compiler(${ENV_PATH}/bin/${CXX})

Но cmake все еще проверяет символы.

1 ответ

Не имея вашей среды или сообщения об ошибке, нелегко определить действительную причину, но вот две из общих причин и соответствующие исправления:

  1. Если у вас нет полного файла набора инструментов, созданного для вашей пользовательской среды - поэтому CMake не может связать простую тестовую программу - вы можете попробовать относительно новую (версия 3.6) глобальную переменную CMake с именем CMAKE_TRY_COMPILE_TARGET_TYPE,

    Так что просто добавьте следующее:

    set(CMAKE_TRY_COMPILE_TARGET_TYPE STATIC_LIBRARY)
    

    Тогда CMake просто попытался бы построить статическую библиотеку.

  2. Чтобы установить только самые распространенные переменные компилятора GCC и выполнить только некоторые базовые проверки, попробуйте:

    SET(CMAKE_SYSTEM_NAME Generic)
    

    См. CMake Cross Compiling: Настройка системы и набора инструментов:

    Если ваша цель - встроенная система без ОС, установите для CMAKE_SYSTEM_NAME значение "Общий"

Рекомендации

Командная строка:

    cmake... \
    -DCMAKE_C_COMPILER_FORCED= ИСТИНА \
    -DCMAKE_CXX_COMPILER_FORCED= ИСТИНА

или

CMakeLists.txt

...
    установить (CMAKE_C_COMPILER_FORCED TRUE)
    установить (CMAKE_CXX_COMPILER_FORCED TRUE)...

Работает для меня.

Другие вопросы по тегам