Подтвердить что ты не робот

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

Я успешно настроил и построил некоторые приложения Qt5 для Android, используя CMake и this утилита 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

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

#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) - без нее программа настраивается и компилируется в порядке.

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

  • используйте разные уровни 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, который я могу использовать для поиска проблемы
4b9b3361

Ответ 1

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

set_property(TARGET Qt5::Core PROPERTY INTERFACE_COMPILE_FEATURES cxx_decltype)

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

Ответ 2

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

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

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

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

Ответ 3

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

Ответ 4

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

  • Закрыть Qt Creator
  • Удалить вручную
    • Папки сборки Qt
    • Все файлы .pro.user и .cmake.user
    • Все папки сборки CMake
  • Заново открыть проект