@@ -128,6 +128,8 @@ endfunction()
128128# add_cxx_library(
129129# NAME
130130# foo
131+ # HEADERS
132+ # foo.h
131133# SOURCES
132134# foo.cc
133135# ${PROJECT_SOURCE_DIR}/Foo/foo.cc
@@ -140,9 +142,9 @@ endfunction()
140142# )
141143function (add_cxx_library)
142144 set (options "TESTING" )
143- set (oneValueArgs "NAME;TYPE" )
145+ set (oneValueArgs "NAME;TYPE;INSTALL_DIR " )
144146 set (multiValueArgs
145- "SOURCES;COMPILE_DEFINITIONS;COMPILE_OPTIONS;LINK_LIBRARIES;LINK_OPTIONS" )
147+ "HEADERS; SOURCES;COMPILE_DEFINITIONS;COMPILE_OPTIONS;LINK_LIBRARIES;LINK_OPTIONS" )
146148 cmake_parse_arguments (LIBRARY
147149 "${options} "
148150 "${oneValueArgs} "
@@ -163,29 +165,46 @@ function(add_cxx_library)
163165
164166 add_library (${LIBRARY_NAME} ${LIBRARY_TYPE} "" )
165167 if (LIBRARY_TYPE STREQUAL "INTERFACE" )
166- target_include_directories (${LIBRARY_NAME} INTERFACE ${CMAKE_CURRENT_SOURCE_DIR} )
168+ target_include_directories (${LIBRARY_NAME} INTERFACE
169+ ${CMAKE_CURRENT_SOURCE_DIR} /include )
167170 target_link_libraries (${LIBRARY_NAME} INTERFACE ${LIBRARY_LINK_LIBRARIES} )
171+ target_link_options (${LIBRARY_NAME} INTERFACE ${LIBRARY_LINK_OPTIONS} )
168172 else ()
169- target_sources (${LIBRARY_NAME} PRIVATE ${LIBRARY_SOURCES} )
170- target_include_directories (${LIBRARY_NAME} PUBLIC ${CMAKE_CURRENT_SOURCE_DIR} )
173+ target_include_directories (${LIBRARY_NAME} PUBLIC
174+ $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR} /include >
175+ $<INSTALL_INTERFACE:include >)
176+ )
177+ target_sources (${LIBRARY_NAME} PRIVATE
178+ ${LIBRARY_HEADERS}
179+ ${LIBRARY_SOURCES}
180+ )
171181 target_compile_definitions (${LIBRARY_NAME} PRIVATE ${LIBRARY_COMPILE_DEFINITIONS} )
172182 target_compile_features (${LIBRARY_NAME} PRIVATE cxx_std_20)
173183 target_compile_options (${LIBRARY_NAME} PRIVATE ${LIBRARY_COMPILE_OPTIONS} )
174184 target_link_libraries (${LIBRARY_NAME} PUBLIC ${LIBRARY_LINK_LIBRARIES} )
175185 target_link_options (${LIBRARY_NAME} PRIVATE ${LIBRARY_LINK_OPTIONS} )
176186 endif ()
187+ set_target_properties (${LIBRARY_NAME} PROPERTIES
188+ VERSION ${PROJECT_VERSION}
189+ POSITION_INDEPENDENT_CODE ON
190+ PUBLIC_HEADER ${LIBRARY_HEADERS}
191+ )
177192
178- include (GNUInstallDirs)
179193 if (APPLE )
180- set_target_properties (${LIBRARY_NAME} PROPERTIES
181- INSTALL_RPATH "@loader_path/../${CMAKE_INSTALL_LIBDIR} ;@loader_path" )
194+ set_target_properties (${LIBRARY_NAME} PROPERTIES INSTALL_RPATH "@loader_path" )
182195 elseif (UNIX )
183- cmake_path(RELATIVE_PATH CMAKE_INSTALL_FULL_LIBDIR
184- BASE_DIRECTORY ${CMAKE_INSTALL_FULL_BINDIR}
185- OUTPUT_VARIABLE libdir_relative_path)
186- set_target_properties (${LIBRARY_NAME} PROPERTIES
187- INSTALL_RPATH "$ORIGIN/${libdir_relative_path} :$ORIGIN" )
196+ set_target_properties (${LIBRARY_NAME} PROPERTIES INSTALL_RPATH "$ORIGIN" )
188197 endif ()
198+
199+ # Install
200+ include (GNUInstallDirs)
201+ install (TARGETS ${LIBRARY_NAME}
202+ EXPORT ${PROJECT_NAME} Targets
203+ PUBLIC_HEADER DESTINATION ${CMAKE_INSTALL_INCLUDEDIR} /${LIBRARY_INSTALL_DIR}
204+ ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}
205+ LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
206+ #RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
207+ )
189208 add_library (${PROJECT_NAMESPACE} ::${LIBRARY_NAME} ALIAS ${LIBRARY_NAME} )
190209 message (STATUS "Configuring library ${LIBRARY_NAME} ...DONE" )
191210endfunction ()
0 commit comments