Use target-specific android-build directory
This fix allows using multiple executable targets in a single CMakeLists.txt when building for android. Previously artifacts for both targes were collected in a common android-build directory, that led to artifacts overlaping and broke the deployment process. Users need to set the QT_USE_TARGET_ANDROID_BUILD_DIR to TRUE to enable the new android-build directories naming. This change need QtC adjustments that will take a new directory naming into account. Task-number: QTBUG-117443 Pick-to: 6.6 6.5 Change-Id: I47568798e2a2e8550ddab1990a33611967183761 Reviewed-by: Assam Boudjelthia <assam.boudjelthia@qt.io> (cherry picked from commit 5f0575256a4af14c1f2f9a846e40cd9490c12b56) Reviewed-by: Qt Cherry-pick Bot <cherrypick_bot@qt-project.org>
This commit is contained in:
parent
273f1ffbf6
commit
5d9c9fe8f7
@ -195,8 +195,11 @@ function(qt_internal_android_test_arguments target timeout out_test_runner out_t
|
||||
endif()
|
||||
|
||||
set(target_binary_dir "$<TARGET_PROPERTY:${target},BINARY_DIR>")
|
||||
set(apk_dir "${target_binary_dir}/android-build")
|
||||
|
||||
if(QT_USE_TARGET_ANDROID_BUILD_DIR)
|
||||
set(apk_dir "${target_binary_dir}/android-build-${target}")
|
||||
else()
|
||||
set(apk_dir "${target_binary_dir}/android-build")
|
||||
endif()
|
||||
set(${out_test_arguments}
|
||||
"--path" "${apk_dir}"
|
||||
"--adb" "${ANDROID_SDK_ROOT}/platform-tools/adb"
|
||||
|
@ -385,7 +385,34 @@ function(qt6_android_add_apk_target target)
|
||||
set(deployment_tool "${QT_HOST_PATH}/${QT6_HOST_INFO_BINDIR}/androiddeployqt")
|
||||
# No need to use genex for the BINARY_DIR since it's read-only.
|
||||
get_target_property(target_binary_dir ${target} BINARY_DIR)
|
||||
set(apk_final_dir "${target_binary_dir}/android-build")
|
||||
|
||||
if($CACHE{QT_USE_TARGET_ANDROID_BUILD_DIR})
|
||||
set(apk_final_dir "${target_binary_dir}/android-build-${target}")
|
||||
else()
|
||||
if(QT_USE_TARGET_ANDROID_BUILD_DIR)
|
||||
message(WARNING "QT_USE_TARGET_ANDROID_BUILD_DIR needs to be set in CACHE")
|
||||
endif()
|
||||
|
||||
get_property(known_android_build GLOBAL PROPERTY _qt_internal_known_android_build_dir)
|
||||
get_property(already_warned GLOBAL PROPERTY _qt_internal_already_warned_android_build_dir)
|
||||
set(apk_final_dir "${target_binary_dir}/android-build")
|
||||
if(NOT QT_SKIP_ANDROID_BUILD_DIR_CHECK AND "${apk_final_dir}" IN_LIST known_android_build
|
||||
AND NOT "${apk_final_dir}" IN_LIST already_warned)
|
||||
message(WARNING "${CMAKE_CURRENT_SOURCE_DIR}/CMakeLists.txt contains multiple"
|
||||
" Qt Android executable targets. This can lead to mixing of deployment artifacts"
|
||||
" of targets defined there. Setting QT_USE_TARGET_ANDROID_BUILD_DIR=TRUE"
|
||||
" allows building multiple executable targets within a single CMakeLists.txt."
|
||||
" Note: This option is not supported by Qt Creator versions older than 13."
|
||||
" Set QT_SKIP_ANDROID_BUILD_DIR_CHECK=TRUE to suppress this warning."
|
||||
)
|
||||
set_property(GLOBAL APPEND PROPERTY _qt_internal_already_warned_android_build_dir
|
||||
"${apk_final_dir}")
|
||||
else()
|
||||
set_property(GLOBAL APPEND PROPERTY
|
||||
_qt_internal_known_android_build_dir "${apk_final_dir}")
|
||||
endif()
|
||||
endif()
|
||||
|
||||
set(apk_file_name "${target}.apk")
|
||||
set(dep_file_name "${target}.d")
|
||||
set(apk_final_file_path "${apk_final_dir}/${apk_file_name}")
|
||||
@ -1364,3 +1391,6 @@ function(_qt_internal_expose_android_package_source_dir_to_ide target)
|
||||
endforeach()
|
||||
endif()
|
||||
endfunction()
|
||||
|
||||
set(QT_INTERNAL_ANDROID_TARGET_BUILD_DIR_SUPPORT ON CACHE INTERNAL
|
||||
"Indicates that Qt supports per-target Android build directories")
|
||||
|
Loading…
x
Reference in New Issue
Block a user