summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/corelib/Qt6AndroidMacros.cmake38
1 files changed, 17 insertions, 21 deletions
diff --git a/src/corelib/Qt6AndroidMacros.cmake b/src/corelib/Qt6AndroidMacros.cmake
index bd60c60055..da1cfe7ece 100644
--- a/src/corelib/Qt6AndroidMacros.cmake
+++ b/src/corelib/Qt6AndroidMacros.cmake
@@ -320,13 +320,12 @@ function(qt6_android_add_apk_target target)
endif()
set(deployment_tool "${QT_HOST_PATH}/${QT6_HOST_INFO_BINDIR}/androiddeployqt")
- set(apk_final_dir "$<TARGET_PROPERTY:${target},BINARY_DIR>/android-build")
- set(apk_intermediate_dir "${CMAKE_CURRENT_BINARY_DIR}/android-build")
+ get_target_property(apk_final_dir ${target} BINARY_DIR)
+ set(apk_final_dir "${apk_final_dir}/android-build")
set(apk_file_name "${target}.apk")
set(dep_file_name "${target}.d")
set(apk_final_file_path "${apk_final_dir}/${apk_file_name}")
- set(apk_intermediate_file_path "${apk_intermediate_dir}/${apk_file_name}")
- set(dep_intermediate_file_path "${apk_intermediate_dir}/${dep_file_name}")
+ set(dep_file_path "${apk_final_dir}/${dep_file_name}")
# Temporary location of the library target file. If the library is built as an external project
# inside multi-abi build the QT_ANDROID_ABI_TARGET_PATH variable will point to the ABI related
@@ -364,33 +363,30 @@ function(qt6_android_add_apk_target target)
if(QT_ENABLE_VERBOSE_DEPLOYMENT)
list(APPEND extra_args "--verbose")
endif()
- # The DEPFILE argument to add_custom_command is only available with Ninja or CMake>=3.20 and make.
- if (CMAKE_GENERATOR MATCHES "Ninja" OR
+ # The DEPFILE argument to add_custom_command is only available with Ninja or CMake>=3.20 and
+ # make.
+ if(CMAKE_GENERATOR MATCHES "Ninja" OR
(CMAKE_VERSION VERSION_GREATER_EQUAL 3.20 AND CMAKE_GENERATOR MATCHES "Makefiles"))
- # Add custom command that creates the apk in an intermediate location.
- # We need the intermediate location, because we cannot have target-dependent generator
- # expressions in OUTPUT.
- add_custom_command(OUTPUT "${apk_intermediate_file_path}"
+ # Add custom command that creates the apk and triggers rebuild if files listed in
+ # ${dep_file_path} are changed.
+ add_custom_command(OUTPUT "${apk_final_file_path}"
COMMAND ${CMAKE_COMMAND}
-E copy "$<TARGET_FILE:${target}>"
- "${apk_intermediate_dir}/libs/${CMAKE_ANDROID_ARCH_ABI}/$<TARGET_FILE_NAME:${target}>"
+ "${apk_final_dir}/libs/${CMAKE_ANDROID_ARCH_ABI}/$<TARGET_FILE_NAME:${target}>"
COMMAND "${deployment_tool}"
--input "${deployment_file}"
- --output "${apk_intermediate_dir}"
- --apk "${apk_intermediate_file_path}"
- --depfile "${dep_intermediate_file_path}"
+ --output "${apk_final_dir}"
+ --apk "${apk_final_file_path}"
+ --depfile "${dep_file_path}"
--builddir "${CMAKE_BINARY_DIR}"
${extra_args}
COMMENT "Creating APK for ${target}"
DEPENDS "${target}" "${deployment_file}" ${extra_deps}
- DEPFILE "${dep_intermediate_file_path}")
+ DEPFILE "${dep_file_path}"
+ )
- # Create a ${target}_make_apk target to copy the apk from the intermediate to its final
- # location. If the final and intermediate locations are identical, this is a no-op.
- add_custom_target(${target}_make_apk
- COMMAND "${CMAKE_COMMAND}"
- -E copy_if_different "${apk_intermediate_file_path}" "${apk_final_file_path}"
- DEPENDS "${apk_intermediate_file_path}")
+ # Create a ${target}_make_apk target to trigger the apk build.
+ add_custom_target(${target}_make_apk DEPENDS "${apk_final_file_path}")
else()
add_custom_target(${target}_make_apk
DEPENDS ${target}_prepare_apk_dir