diff options
-rw-r--r-- | cmake/QtBuild.cmake | 30 | ||||
-rw-r--r-- | cmake/QtFinishPrlFile.cmake | 7 | ||||
-rw-r--r-- | src/corelib/Qt6CoreMacros.cmake | 1 |
3 files changed, 36 insertions, 2 deletions
diff --git a/cmake/QtBuild.cmake b/cmake/QtBuild.cmake index 3ab3e80e0d..036a291725 100644 --- a/cmake/QtBuild.cmake +++ b/cmake/QtBuild.cmake @@ -2918,6 +2918,15 @@ function(qt_generate_prl_file target install_dir) return() endif() + get_target_property(rcc_objects ${target} QT_RCC_OBJECTS) + if(rcc_objects) + if(QT_WILL_INSTALL) + list(TRANSFORM rcc_objects PREPEND "$$[QT_INSTALL_LIBS]/") + endif() + else() + unset(rcc_objects) + endif() + unset(prl_libs) qt_collect_libs(${target} prl_libs) @@ -2940,7 +2949,8 @@ function(qt_generate_prl_file target install_dir) file(GENERATE OUTPUT "${prl_file_name}" CONTENT - "QMAKE_PRL_BUILD_DIR = ${CMAKE_CURRENT_BINARY_DIR} + "RCC_OBJECTS = ${rcc_objects} +QMAKE_PRL_BUILD_DIR = ${CMAKE_CURRENT_BINARY_DIR} QMAKE_PRL_TARGET = $<TARGET_FILE_NAME:${target}> QMAKE_PRL_CONFIG = ${prl_config} QMAKE_PRL_VERSION = ${PROJECT_VERSION} @@ -3483,6 +3493,24 @@ function(qt_add_resource target resourceName) EXPORT "${INSTALL_CMAKE_NAMESPACE}${target}Targets" DESTINATION ${INSTALL_LIBDIR} ) + foreach(out_target ${out_targets}) + get_target_property(resource_name ${out_target} QT_RESOURCE_NAME) + if(NOT resource_name) + continue() + endif() + if(QT_WILL_INSTALL) + # Compute the install location of the rcc object file. + # This is the relative path below the install destination (install_prefix/lib). + # See CMake's computeInstallObjectDir function. + set(object_file_name "qrc_${resource_name}.cpp${CMAKE_CXX_OUTPUT_EXTENSION}") + qt_path_join(rcc_object_file_path + "objects-$<CONFIG>" ${out_target} .rcc "${object_file_name}") + else() + # In a non-prefix build we use the object file paths right away. + set(rcc_object_file_path $<TARGET_OBJECTS:$<TARGET_NAME:${out_target}>>) + endif() + set_property(TARGET ${target} APPEND PROPERTY QT_RCC_OBJECTS "${rcc_object_file_path}") + endforeach() endif() endfunction() diff --git a/cmake/QtFinishPrlFile.cmake b/cmake/QtFinishPrlFile.cmake index c7c913d4ae..4927761674 100644 --- a/cmake/QtFinishPrlFile.cmake +++ b/cmake/QtFinishPrlFile.cmake @@ -26,7 +26,9 @@ endfunction() file(STRINGS "${IN_FILE}" lines) set(content "") foreach(line ${lines}) - if(line MATCHES "^QMAKE_PRL_LIBS_FOR_CMAKE = (.*)") + if(line MATCHES "^RCC_OBJECTS = (.*)") + set(rcc_objects ${CMAKE_MATCH_1}) + elseif(line MATCHES "^QMAKE_PRL_LIBS_FOR_CMAKE = (.*)") unset(adjusted_libs) foreach(lib ${CMAKE_MATCH_1}) if("${lib}" STREQUAL "") @@ -47,6 +49,9 @@ foreach(line ${lines}) list(APPEND adjusted_libs "${lib}") endif() endforeach() + if(rcc_objects) + list(APPEND adjusted_libs ${rcc_objects}) + endif() list(JOIN adjusted_libs " " adjusted_libs_for_qmake) string(APPEND content "QMAKE_PRL_LIBS = ${adjusted_libs_for_qmake}\n") string(APPEND content "QMAKE_PRL_LIBS_FOR_CMAKE = ${adjusted_libs}\n") diff --git a/src/corelib/Qt6CoreMacros.cmake b/src/corelib/Qt6CoreMacros.cmake index f740fbe921..856740af3f 100644 --- a/src/corelib/Qt6CoreMacros.cmake +++ b/src/corelib/Qt6CoreMacros.cmake @@ -1042,6 +1042,7 @@ function(__qt_propagate_generated_resource target resource_name generated_source if(type STREQUAL STATIC_LIBRARY) set(resource_target "${target}_resources_${resourceName}") add_library("${resource_target}" OBJECT "${generated_source_code}") + set_property(TARGET ${resource_target} APPEND PROPERTY QT_RESOURCE_NAME ${resourceName}) # Use TARGET_NAME genex to map to the correct prefixed target name when it is exported # via qt_install(EXPORT), so that the consumers of the target can find the object library |