Настроить приложение Qt5 5.7 для Android с помощью CMake

Я успешно настроил и построил некоторые приложения Qt5 для Android, используя CMake и эту утилиту CMake.

Все работало нормально, пока я не переключился с Qt5.6 на Qt5.7 . Когда я пытаюсь настроить, я получаю ошибку CMake, которая мне не очень помогает:

-- Configuring done CMake Error in CMakeLists.txt: No known features for CXX compiler "GNU" version 4.9. -- Generating done -- Build files have been written to: /path/to/build-dir 

Я запускаю CMake следующим образом:

 ANDROID_SDK=/path/to/android-sdk-linux \ ANDROID_NDK=/path/to/android-ndk-r12 \ QT_ANDROID_ROOT=/path/to/Qt-5.7.0-android \ JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk \ ANT=/usr/bin/ant \ cmake /path/to/CMakeLists.txt \ -DCMAKE_PREFIX_PATH=$QT_ANDROID_ROOT \ -DCMAKE_TOOLCHAIN_FILE=/path/to/android.toolchain.cmake 

Я могу воспроизвести это поведение с минимальной программой на C ++:

 #include <iostream> int main() { std::cout << "hi" << std::endl; } 

И минимальный CMakeLists.txt :

 cmake_minimum_required(VERSION 3.1) find_package(Qt5Core) add_executable(foo main.cpp) target_link_libraries(foo Qt5::Core) 

target_link_libraries(foo Qt5::Core) которая вводит эту ошибку, является target_link_libraries(foo Qt5::Core) – без нее программа настраивается и компилируется в порядке.

Вот некоторые вещи, которые я пробовал:

  • Используйте разные уровни API NDK, установив ANDROID_NATIVE_API_LEVEL для android-8 , 9 , 16 , 18 и некоторые другие значения, которые работали где-то еще (построение Qt5.7 автоматически использует android-16 )

  • Использовать разные релизы NDK (10е работало для меня с Qt5.6, ток 12)

  • Попробовал предварительно построенный Qt5.7, а не доморощенный от GitHub

До сих пор я просто сочетал разные версии SDK / NDK / Qt / NDK_API_LEVEL, но, честно говоря, я просто не знаю, что я делаю.

Вы можете мне помочь:

  • Рассказывая мне, что я сделал неправильно (лучше всего!)
  • Уточните эту ошибку CMake, чтобы дать мне подсказку
  • Предоставить мне рабочий пример CMake / Android / Qt5.7, который я могу использовать самостоятельно, чтобы найти проблему

Solutions Collecting From Web of "Настроить приложение Qt5 5.7 для Android с помощью CMake"

В качестве обходного пути ( отсюда ) вы можете прокомментировать строку

 set_property(TARGET Qt5::Core PROPERTY INTERFACE_COMPILE_FEATURES cxx_decltype) 

В файле lib / cmake / Qt5Core / Qt5CoreConfigExtras.cmake

Я согласен с тем, что сообщение не очень полезно, поэтому мой ответ не является предположением. Кажется, что cmake не может правильно определить вашу инструментальную цепочку (GCC), и это связано с внутренними элементами cmake, не обязательно с вашим скриптом.

Я нашел связанный с этим вопрос: «никаких известных функций для компилятора CXX» при компиляции с MSVC ++ 2013

Кроме того, если вы google «Нет известных функций для компилятора CXX« cmake », в результатах поиска появятся сообщения об ошибках cmake.

Вы можете попробовать обновить версию cmake, если она доступна. Если проблема не решена, я предлагаю использовать список рассылки cmake-users или IRC-каналы, чтобы решить проблему.

Утилита CMake, которую вы используете, больше не обновляется для новых версий Qt и Android-NDK. Используя его, у меня была такая же проблема, как у вас, и я не мог заставить его работать. Однако, заменив файл инструментальной привязки CMake, поставляемый Android NDK, я мог бы заставить все работать и компилироваться по желанию.