qt_android_multi_abi_forward_vars

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

此变量在 Qt 6.4.2 中引入。

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

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

允许指定需要从主 ABI 项目转发到特定 ABI 子项目的 CMake 变量列表。由于多 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()

© 2025 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.