簡體   English   中英

使用 CMake 為 Android 配置 Qt5 5.7 應用程序

[英]configure a Qt5 5.7 application for Android with CMake

我已經使用CMake這個CMake 實用程序成功地為Android配置和構建了一些 Qt5 應用程序。

一切正常,直到我從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-891618和其他一些在其他地方工作的值來使用不同的 NDK API 級別(構建 Qt5.7 自動使用android-16

  • 使用不同的NDK版本(10e 使用 Qt5.6 為我工作,當前為 12)

  • 嘗試預構建的 Qt5.7 而不是從 GitHub 自制

直到現在我只是結合了不同版本的 SDK/NDK/Qt/NDK_API_LEVEL 但老實說我只是不知道我在做什么..

你可以通過以下方式幫助我:

  • 告訴我我做錯了什么(最好!)
  • 詳細說明那個 CMake 錯誤給我一個提示
  • 為我提供一個有效的 CMake/Android/Qt5.7 示例,我可以使用它來查找問題

作為解決方法(從這里),您可以注釋掉該行

set_property(TARGET Qt5::Core PROPERTY INTERFACE_COMPILE_FEATURES cxx_decltype)

在 lib/cmake/Qt5Core/Qt5CoreConfigExtras.cmake 文件中

對我來說,訣竅是清理所有配置和臨時構建文件並強制重新配置項目:

  • 關閉 Qt Creator
  • 手動移除
    • Qt 構建文件夾
    • 所有.pro.user.cmake.user文件
    • 所有 CMake 構建文件夾
  • 重新打開項目

我同意該消息不是很有幫助,所以我的回答不是猜測。 似乎 cmake 無法正確檢測您的工具鏈(GCC),這與 cmake 內部結構有關,不一定與您的腳本有關。

我發現了一個相關的問題: 使用 MSVC++ 2013 編譯時“沒有 CXX 編譯器的已知功能”

此外,如果您在 google 上搜索“CXX 編譯器沒有已知功能”cmake',搜索結果中會出現一些 cmake 的錯誤報告。

您可以嘗試更新 cmake 版本(如果有)。 如果問題仍然存在,我建議使用 cmake-users 郵件列表或 IRC 頻道來解決問題。

您使用的 CMake 實用程序不再適用於較新的 Qt 和 Android-NDK 版本。 使用它,我遇到了和你一樣的問題,我無法讓它工作。 但是,替換由 Android NDK 提供的 CMake 工具鏈文件,我可以讓一切正常工作並按照需要進行編譯。

你必須在 CMakeFile.txt 中設置“ project(MyProject)

我有同樣的錯誤,但 project(Myproject) 在 if 語句中。 將其移出解決了問題:

CMakeList.txt 錯誤:cmake_minimum_required (VERSION 3.10) if(${SOMETHING}) project(MyProject) : endif

CMakeList.txt 成功: cmake_minimum_required (VERSION 3.10) project(MyProject) if(${SOMETHING}) : endif

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM