使用CMake为Android配置Qt5 5.7应用程序

fra*_*ans 16 c++ qt android cmake android-ndk

我已经使用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
Run Code Online (Sandbox Code Playgroud)

我像这样运行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
Run Code Online (Sandbox Code Playgroud)

我可以用最小的C++程序重现这种行为:

#include <iostream>
int main() { std::cout << "hi" << std::endl; }
Run Code Online (Sandbox Code Playgroud)

最小的CMakeLists.txt:

cmake_minimum_required(VERSION 3.1)
find_package(Qt5Core)
add_executable(foo main.cpp)
target_link_libraries(foo Qt5::Core)
Run Code Online (Sandbox Code Playgroud)

引入此错误的行是target_link_libraries(foo Qt5::Core)- 没有它,程序配置和编译正常.

以下是我尝试的一些事情:

  • 通过设置使用不同的NDK API级别ANDROID_NATIVE_API_LEVELandroid-8,9,16,18和其他工作somwhere一些其他值(建设Qt5.7自动使用android-16)

  • 使用不同NDK版本(10e为Qt5.6工作,当前为12)

  • 尝试过预先构建的Qt5.7而不是GitHub的本土版本

到目前为止,我只是结合了不同版本的SDK/NDK/Qt/NDK_API_LEVEL但老实说我只是不知道我在做什么..

你可以帮助我:

  • 告诉我我做错了什么(最好!)
  • 详细说明那个CMake错误给我一个提示
  • 为我提供了一个工作的CMake/Android/Qt5.7示例,我可以用它来查找问题

cdo*_*gal 11

作为一种解决方法(从这里开始),您可以注释掉该行

set_property(TARGET Qt5::Core PROPERTY INTERFACE_COMPILE_FEATURES cxx_decltype)
Run Code Online (Sandbox Code Playgroud)

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