web-dev-qa-db-ja.com

Qt5 5.7アプリケーションをAndroid for CMakeで構成します

Android用のいくつかのQt5アプリケーションをCMakeを使用して正常に構成および構築しましたおよびthisCMakeユーティリティ。

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)です。この行がないと、プログラムは正しく構成およびコンパイルされます。

これが私が試したいくつかのことです:

  • _Android_NATIVE_API_LEVEL_を_Android-8_、_9_、_16_、_18_、および他の場所で機能する他のいくつかの値(Qt5.7を自動的に構築)に設定することにより、異なるNDK APIレベルを使用します_Android-16_を使用)

  • 異なるNDKリリースを使用します(10eはQt5.6で私のために働きました、現在は12です)

  • gitHubからの自社開発ではなく、ビルド済みのQt5.7を試してみました

これまでは、SDK/NDK/Qt/NDK_API_LEVELの異なるバージョンを組み合わせただけでしたが、正直なところ、自分が何をしているかわかりません。

あなたは私を助けることができます:

  • 私が間違ったことを教えて(最高!)
  • そのCMakeエラーについて詳しく説明して、ヒントを与えます
  • 問題を見つけるために自分で使用できるCMake/Android/Qt5.7の動作例を提供してください
16
frans

回避策として( ここから )行をコメント化できます

set_property(TARGET Qt5::Core PROPERTY INTERFACE_COMPILE_FEATURES cxx_decltype)

lib/cmake/Qt5Core/Qt5CoreConfigExtras.cmakeファイル内

11
cdovgal

私にとっての秘訣は、すべての構成ファイルと一時ビルドファイルをクリーンアップして、プロジェクトを強制的に再構成することでした。

  • Qt Creatorを閉じる
  • 手動で削除
    • Qtビルドフォルダー
    • すべて .pro.userおよび.cmake.userファイル
    • すべてのCMakeビルドフォルダー
  • プロジェクトを再度開きます
1
Adrien Leravat

メッセージはあまり役に立たないので、私の答えは推測ではありません。 cmakeがツールチェーン(GCC)を正しく検出できないようで、これはcmakeの内部に関連しており、必ずしもスクリプトに関連しているわけではありません。

関連する質問が見つかりました: MSVC++ 2013でコンパイルすると、「CXXコンパイラの既知の機能はありません」=

また、「CXXコンパイラの既知の機能はありません」cmakeをググると、検索結果にcmakeに関するバグレポートがいくつか表示されます。

あなたが試すことができるのは、cmakeバージョンが利用可能な場合、それを更新することです。問題が解決しない場合は、cmake-usersメーリングリストまたはIRCチャネルを使用して問題を解決することをお勧めします。

0
Eirik M

使用しているCMakeユーティリティは、新しいQtおよびAndroid-NDKバージョンでは最新ではありません。それを使用すると、私はあなたと同じ問題を抱えていて、それを機能させることができませんでした。ただし、Android NDKによって提供されるCMakeツールチェーンファイルを置き換えると、すべてを機能させ、希望どおりにコンパイルすることができます。

0
oLen