Skip to content

Commit 7c7f5ae

Browse files
committed
Allow creating library before including LibraryTarget
This allows using `qt_add_qml_module` to create the library, populate some additional variables based on that and only include `LibraryTarget` in the end.
1 parent 39410b1 commit 7c7f5ae

File tree

1 file changed

+25
-3
lines changed

1 file changed

+25
-3
lines changed

cmake/modules/LibraryTarget.cmake

Lines changed: 25 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -152,7 +152,14 @@ endif ()
152152

153153
# add library to be created, set libs to link against, set version and C++ standard
154154
if (META_HEADER_ONLY_LIB)
155-
add_library(${META_TARGET_NAME} INTERFACE)
155+
if (TARGET "${META_TARGET_NAME}")
156+
get_target_property(SET_TARGET_NAME ${META_TARGET_NAME} TYPE)
157+
if (NOT SET_TARGET_NAME STREQUAL "INTERFACE_LIBRARY")
158+
message(FATAL_ERROR "Library ${META_TARGET_NAME} has mismatching type ${SET_TARGET_NAME}.")
159+
endif ()
160+
else ()
161+
add_library(${META_TARGET_NAME} INTERFACE)
162+
endif ()
156163
target_link_libraries(${META_TARGET_NAME} INTERFACE ${META_ADDITIONAL_LINK_FLAGS} "${PUBLIC_LIBRARIES}"
157164
"${PRIVATE_LIBRARIES}")
158165
target_include_directories(
@@ -164,7 +171,15 @@ if (META_HEADER_ONLY_LIB)
164171
target_compile_options(${META_TARGET_NAME} INTERFACE "${META_PUBLIC_COMPILE_OPTIONS}" "${META_PRIVATE_COMPILE_OPTIONS}")
165172
set_target_properties(${META_TARGET_NAME} PROPERTIES EXPORT_COMPILE_COMMANDS "${ENABLE_EXPORT_COMPILE_COMMANDS}")
166173
else ()
167-
add_library(${META_TARGET_NAME} ${META_LIBRARY_TYPE} ${ALL_FILES})
174+
if (TARGET "${META_TARGET_NAME}")
175+
get_target_property(SET_TARGET_NAME ${META_TARGET_NAME} TYPE)
176+
if (NOT SET_TARGET_NAME STREQUAL "${META_LIBRARY_TYPE}_LIBRARY")
177+
message(FATAL_ERROR "Library ${META_TARGET_NAME} has mismatching type ${SET_TARGET_NAME}.")
178+
endif ()
179+
target_sources(${META_TARGET_NAME} PRIVATE ${ALL_FILES})
180+
else ()
181+
add_library(${META_TARGET_NAME} ${META_LIBRARY_TYPE} ${ALL_FILES})
182+
endif ()
168183
target_link_libraries(
169184
${META_TARGET_NAME}
170185
PUBLIC ${META_ADDITIONAL_LINK_FLAGS} "${PUBLIC_LIBRARIES}"
@@ -230,7 +245,14 @@ else ()
230245

231246
# add target for pulling only headers because some libraries contain header-only parts which are useful on their own
232247
if (NOT META_PLUGIN_CATEGORY)
233-
add_library(${META_TARGET_NAME}-headers INTERFACE)
248+
if (TARGET "${META_TARGET_NAME}-headers")
249+
get_target_property(SET_TARGET_NAME "${META_TARGET_NAME}-headers" TYPE)
250+
if (NOT SET_TARGET_NAME STREQUAL "INTERFACE_LIBRARY")
251+
message(FATAL_ERROR "Library ${META_TARGET_NAME}-headers has mismatching type ${SET_TARGET_NAME}.")
252+
endif ()
253+
else ()
254+
add_library(${META_TARGET_NAME}-headers INTERFACE)
255+
endif ()
234256
target_include_directories(
235257
${META_TARGET_NAME}-headers
236258
INTERFACE $<BUILD_INTERFACE:${TARGET_INCLUDE_DIRECTORY_BUILD_INTERFACE}>

0 commit comments

Comments
 (0)