我已经成功地使用 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
和其他一些在其他地方有效的值(构建Qt5.7自动使用android-16
),使用不同的NDK API级别使用不同的
NDK
版本(10e对我来说与Qt5.6一起使用效果很好,当前版本是12)尝试预构建的Qt5.7而不是从GitHub自己制作
到目前为止,我只是组合了不同版本的SDK / NDK / Qt / NDK_API_LEVEL,但老实说我不知道自己在做什么..
您可以通过以下方式帮助我:
- 告诉我我做错了什么(最好!)
- 详细解释CMake错误以给我提示
- 提供一个可工作的CMake / Android / Qt5.7示例,我可以使用它来查找问题
set(CMAKE_CXX_STANDARD 11)
命令,该命令会让cmake添加一个-std=gnu++11
选项,因此你的编译器可能不喜欢它。如果可以的话,尝试将gcc版本升级到5.3或类似版本可能会有所帮助。 - cmourglia