Как частично отключить проверку пользовательского компилятора cmake C/C++
Я пытаюсь сделать кросс-компиляцию с помощью cmake. Некоторые из них просты со всеми примерами в Интернете, мне удалось кросс-компилировать мою библиотеку в Linux (x86 и ARM), Windows и Android. Но сейчас я хотел бы сделать это на специальной платформе.
Процесс, который мне нужен для достижения:
- Sourcing мое окружение (это разрушит все предыдущие классические окружения bash)
- Компилировать с помощью cmake
- Выполнить то, что я хочу
Но 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 ответ
Не имея вашей среды или сообщения об ошибке, нелегко определить действительную причину, но вот две из общих причин и соответствующие исправления:
Если у вас нет полного файла набора инструментов, созданного для вашей пользовательской среды - поэтому CMake не может связать простую тестовую программу - вы можете попробовать относительно новую (версия 3.6) глобальную переменную CMake с именем
CMAKE_TRY_COMPILE_TARGET_TYPE
,Так что просто добавьте следующее:
set(CMAKE_TRY_COMPILE_TARGET_TYPE STATIC_LIBRARY)
Тогда CMake просто попытался бы построить статическую библиотеку.
Чтобы установить только самые распространенные переменные компилятора 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)...
Работает для меня.