[英]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-8
、 9
、 16
、 18
和其他一些在其他地方工作的值來使用不同的 NDK API 級別(構建 Qt5.7 自動使用android-16
)
使用不同的NDK
版本(10e 使用 Qt5.6 為我工作,當前為 12)
嘗試預構建的 Qt5.7 而不是從 GitHub 自制
直到現在我只是結合了不同版本的 SDK/NDK/Qt/NDK_API_LEVEL 但老實說我只是不知道我在做什么..
你可以通過以下方式幫助我:
作為解決方法(從這里),您可以注釋掉該行
set_property(TARGET Qt5::Core PROPERTY INTERFACE_COMPILE_FEATURES cxx_decltype)
在 lib/cmake/Qt5Core/Qt5CoreConfigExtras.cmake 文件中
對我來說,訣竅是清理所有配置和臨時構建文件並強制重新配置項目:
.pro.user
和.cmake.user
文件我同意該消息不是很有幫助,所以我的回答不是猜測。 似乎 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.