CMake: Write object libs of Qt resources to .prl files
Since commit e343affd634 we're creating object libraries for Qt resources in static libraries. Those must be reflected in the generated .prl files for static builds of Qt. In qt_add_resource, we now calculate the install locations of the object files of rcc-generated C++ files and save them in the target property QT_RCC_OBJECTS. This property is then passed to QtFinishPrlFile to write the object file paths to the .prl file. Change-Id: Ic383892d723d02fc91f712bc2dbcbc90babad074 Reviewed-by: Simon Hausmann <hausmann@gmail.com> Reviewed-by: Alexandru Croitor <alexandru.croitor@qt.io>
This commit is contained in:
parent
bd2a14ff98
commit
4ab5432081
@ -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()
|
||||
|
@ -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")
|
||||
|
@ -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
|
||||
|
Loading…
x
Reference in New Issue
Block a user