【问题标题】:configure a Qt5 5.7 application for Android with CMake使用 CMake 为 Android 配置 Qt5 5.7 应用程序
【发布时间】:2016-10-27 21:26:37
【问题描述】:

我已经使用 CMakethis 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 示例,我可以使用它来查找问题

【问题讨论】:

  • 同样的问题,找了一个下午。使用 Qt5.6.1 一切正常,但与 Qt5.7.0 相同的工具链给了我和你一样的错误。还尝试了 cmake 3.5.2,但运气不佳。
  • @frans:如果我是你,我会放弃 qt-android-cmake 并从我的 CMake 脚本中手动编写 .pro 文件。这就是我所做的,并且很明显自己编写 .pro 文件,因为语法非常简单......这需要你做一些工作,但从长远来看可能是一个更好的解决方案......
  • Qt5.7 做了一个set(CMAKE_CXX_STANDARD 11),这使得 cmake 添加了一个-std=gnu++11,所以也许你的编译器不喜欢它,如果可以的话,值得尝试将你的 gcc 版本更新到 5.3 或像这样的东西。
  • 另外,我不知道你是否在使用 QtCreator,但我记得在让最后一个版本编译我的东西后出现了这种错误,我必须得到一个新的完全干净的工作目录让它再次编译(从命令行,我认为我不会再运行 QtCreator 了:D),也可能与此有关。

标签: android c++ qt android-ndk cmake


【解决方案1】:

作为一种解决方法 (from here),您可以注释掉该行

set_property(TARGET Qt5::Core PROPERTY INTERFACE_COMPILE_FEATURES cxx_decltype)

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

【讨论】:

    【解决方案2】:

    对我来说,诀窍是清除所有配置和临时构建文件并强制重新配置项目:

    • 关闭 Qt Creator
    • 手动删除
      • Qt 构建文件夹
      • 所有.pro.user.cmake.user 文件
      • 所有 CMake 构建文件夹
    • 重新打开项目

    【讨论】:

      【解决方案3】:

      我同意该消息不是很有帮助,所以我的回答是猜测。似乎 cmake 无法正确检测到您的工具链 (GCC),这与 cmake 内部有关,不一定是您的脚本。

      我发现了一个相关问题:"no known features for CXX compiler" when compiling with MSVC++ 2013

      另外,如果你用谷歌搜索“CXX 编译器没有已知功能”cmake',搜索结果中会出现一些 cmake 的错误报告。

      您可以尝试更新 cmake 版本(如果有的话)。如果问题仍然存在,我建议使用 cmake-users 邮件列表或 IRC 频道来解决问题。

      【讨论】:

        【解决方案4】:

        对于较新的 Qt 和 Android-NDK 版本,您使用的 CMake 实用程序不再是最新的。 使用它,我遇到了和你一样的问题,我无法让它工作。但是,替换 Android NDK 提供的 CMake 工具链文件后,我可以让一切正常工作和编译。

        【讨论】:

          【解决方案5】:

          你必须在 CMakeFile.txt 中设置“project(MyProject)

          我有同样的错误,但 project(Myproject) 在 if 语句中。将其移出解决了问题:

          CMakeList.txt 错误: cmake_minimum_required (版本 3.10) 如果(${某事}) 项目(我的项目) : 结束

          CMakeList.txt 成功: cmake_minimum_required (版本 3.10) 项目(我的项目) 如果(${某事}) : 结束

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2022-10-06
            • 2010-12-29
            • 2015-05-22
            相关资源
            最近更新 更多