QT_ANDROID_MULTI_ABI_FORWARD_VARS

Allows to share CMake variables in multi-ABI builds.

This variable was introduced in Qt 6.4.2.

Note: This variable is in technology preview and may change in future releases.

Note: This variable is used only if targeting the Android platform.

Allows specifying the list of CMake variables that need to be forwarded from the main ABI project to ABI-specific subprojects. Due to the specifics of the Multi-ABI project build process, there is no generic way to forward the CMake cache variables that are specified either in the command line or in another similar way.

A typical use case for the variable is propagating CMake cache variables specified in the command line. For example, a project has two variables PROJECT_WIDE_VARIABLE1 and PROJECT_WIDE_VARIABLE2 that affect the project configuration:

 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()

The above contents of CMakeLists.txt enable you to control how MyApp is built by setting the corresponding CMake variables from the command line:

 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"

When configuring the application for desktop, PROJECT_WIDE_VARIABLE1 and PROJECT_WIDE_VARIABLE2 are visible in CMake listings and scripts as global cache variables. This doesn't work for Android Multi-ABI builds because ABI-specific subprojects do not inherit the cache variables from the main-ABI project. This issue can be solved by passing the list of required variables to the QT_ANDROID_MULTI_ABI_FORWARD_VARS variable, so both PROJECT_WIDE_VARIABLE1 and PROJECT_WIDE_VARIABLE2 values will be propagated to the ABI-specific builds.

The variable can be also defined in the project's CMakeLists.txt:

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

Set the variable in this way to have a predefined set of variables that will always be forwarded to ABI-specific projects.

Note: The forwarding is done in the target finalizer, which is implicitly called when qt_add_executable() is used. The finalization occurs automatically when using CMake 3.19 or later.

See also qt_finalize_target() and qt_add_executable().