QT_ANDROID_MULTI_ABI_FORWARD_VARS

允许在多 ABI 构建 中共享 CMake 变量。

此变量自 Qt 6.4.2 版本引入。

注意: 此变量为技术预览,可能在未来的版本中发生变化。

注意: 仅当针对 Android 平台时使用此变量。

允许指定要从一个 ABI 项目转发到 ABI 特定子项目的 CMake 变量列表。由于 Multi-ABI 项目构建过程的特殊性,没有通用的方法可以转发在命令行或类似方式中指定的 CMake 缓存变量。

此变量的典型用例是传播在命令行中指定的 CMake 缓存变量。例如,一个项目有两个变量 PROJECT_WIDE_VARIABLE1PROJECT_WIDE_VARIABLE2,这些变量会影响项目配置

cmake_minimum_required(VERSION 3.18)

project(MyProject LANGUAGES CXX)

find_package(Qt6 REQUIRED COMPONENTS Core)

qt_add_executable(MyApp main.cpp)

if(PROJECT_WIDE_VARIABLE1)
    target_sources(MyApp PRIVATE sourcefile1.cpp)
endif()
if(PROJECT_WIDE_VARIABLE2)
    target_sources(MyApp PRIVATE sourcefile2.cpp)
endif()

上述 CMakeLists.txt 文件的内容允许您通过在命令行中设置相应的 CMake 变量来控制如何构建 MyApp

qt-cmake -S<source directory> -B<build directory> \
    -DPROJECT_WIDE_VARIABLE1=ON \
    -DPROJECT_WIDE_VARIABLE2=ON \
    -DQT_ANDROID_MULTI_ABI_FORWARD_VARS="PROJECT_WIDE_VARIABLE1;PROJECT_WIDE_VARIABLE2"

当为桌面配置应用程序时,PROJECT_WIDE_VARIABLE1PROJECT_WIDE_VARIABLE2 作为全局缓存变量在 CMake 列表和脚本中可见。这对于 Android Multi-ABI 构建不起作用,因为 ABI 特定子项目不会从主-ABI 项目继承缓存变量。可以通过向 QT_ANDROID_MULTI_ABI_FORWARD_VARS 变量传递所需变量列表来解决此问题,这样 PROJECT_WIDE_VARIABLE1PROJECT_WIDE_VARIABLE2 的值都将传播到 ABI 特定构建中。

该变量也可以在项目的 CMakeLists.txt 中定义

...
qt_add_executable(MyApp main.cpp)
...
if(ANDROID)
    set(QT_ANDROID_MULTI_ABI_FORWARD_VARS "PROJECT_WIDE_VARIABLE1;PROJECT_WIDE_VARIABLE2")
endif()
...

以这种方式设置变量,将具有一个预定义的变量集,这些变量将始终转发到 ABI 特定项目。

注意: 转发是在目标最终决期间完成的,当使用 qt_add_executable() 时会隐式调用。当使用 CMake 3.19 或更高版本时,自动执行最终化。

另请参阅 qt_finalize_target()qt_add_executable()

© 2024 The Qt Company Ltd. 本文档中包含的文档贡献是各自所有者的版权。此处提供的文档根据 Free Software Foundation 发布的 GNU 自由文档许可协议版本 1.3 的条款进行许可。Qt 和相应的标志是 The Qt Company Ltd. 在芬兰和/或其他国家的商标。所有其他商标均为其各自所有者的财产。