From 3066c57697a2f83e32be243ce94bde9b36a0562b Mon Sep 17 00:00:00 2001
From: Pascal Palenda <pascal.palenda@akustik.rwth-aachen.de>
Date: Tue, 2 May 2023 16:41:43 +0200
Subject: [PATCH] Improve linking of 3rd party libraries

Adding the object files to the final library target did not transfer any
linking information.
As stated here: https://cmake.org/cmake/help/latest/manual/cmake-buildsystem.7.html#object-libraries
using `target_link_libraries` honors the usage requirements.
---
 src/IhtaAddLibrary.cmake | 15 +++++++++++++--
 1 file changed, 13 insertions(+), 2 deletions(-)

diff --git a/src/IhtaAddLibrary.cmake b/src/IhtaAddLibrary.cmake
index e04af17..f45cb6c 100644
--- a/src/IhtaAddLibrary.cmake
+++ b/src/IhtaAddLibrary.cmake
@@ -184,7 +184,9 @@ macro (ihta_add_library)
 		endif ()
 
 		# Add the actual library target
-		add_library (${IHTA_ADD_LIB_NAME} ${IHTA_ADD_LIB_LIBRARY_TYPE} $<TARGET_OBJECTS:${IHTA_ADD_LIB_TARGET}>)
+		add_library (${IHTA_ADD_LIB_NAME} ${IHTA_ADD_LIB_LIBRARY_TYPE} "")
+		target_link_libraries (${IHTA_ADD_LIB_NAME} PUBLIC ${IHTA_ADD_LIB_TARGET})
+
 		add_library (${IHTA_ADD_LIB_NAMESPACE}::${IHTA_ADD_LIB_NAME} ALIAS ${IHTA_ADD_LIB_NAME})
 
 		# Include Directory
@@ -201,6 +203,13 @@ macro (ihta_add_library)
 		if (NOT CMAKE_SOURCE_DIR STREQUAL CMAKE_CURRENT_SOURCE_DIR)
 			set_property (TARGET ${IHTA_ADD_LIB_NAME} PROPERTY FOLDER ${IHTA_ADD_LIB_IDE_FOLDER})
 		endif ()
+
+		# install the object library so it's in the export set, see:
+		# https://gitlab.kitware.com/cmake/cmake/-/issues/18935
+		install (TARGETS ${IHTA_ADD_LIB_TARGET} EXPORT ${IHTA_ADD_LIB_NAME}Targets # Adapt this in case package project
+				 # is *not* used!
+		)
+
 	else ()
 		set (IHTA_ADD_LIB_TARGET ${IHTA_ADD_LIB_NAME})
 
@@ -234,10 +243,12 @@ macro (ihta_add_library)
 			ihta_add_test (
 				NAME ${IHTA_ADD_LIB_TEST_TARGET}
 				IDE_FOLDER ${IHTA_ADD_LIB_IDE_FOLDER}
-				SOURCES ${IHTA_ADD_LIB_TEST_SOURCES} $<TARGET_OBJECTS:${IHTA_ADD_LIB_TARGET}>
+				SOURCES ${IHTA_ADD_LIB_TEST_SOURCES}
 				COV_SOURCES ${IHTA_ADD_LIB_INCLUDE_DIR} ${IHTA_ADD_LIB_SRC_DIR}
 			)
 
+			target_link_libraries (${IHTA_ADD_LIB_TEST_TARGET} PUBLIC ${IHTA_ADD_LIB_TARGET})
+
 			target_include_directories (
 				${IHTA_ADD_LIB_TEST_TARGET}
 				PUBLIC $<BUILD_INTERFACE:${IHTA_ADD_LIB_INCLUDE_DIR}>
-- 
GitLab