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

© 2024 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.