Skip to content

Commit 8090ca6

Browse files
authored
fix(cmake): Correct linking of dependencies for interface (header-only) libraries. (#45)
1 parent 6aac241 commit 8090ca6

File tree

1 file changed

+14
-7
lines changed

1 file changed

+14
-7
lines changed

CMake/ystdlib-cpp-helpers.cmake

Lines changed: 14 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -65,7 +65,14 @@ function(cpp_library)
6565

6666
check_if_header_only(arg_cpp_lib_PRIVATE_SOURCES _IS_INTERFACE_LIB _)
6767
if(_IS_INTERFACE_LIB)
68+
if(arg_cpp_lib_PRIVATE_LINK_LIBRARIES)
69+
message(
70+
FATAL_ERROR
71+
"`PRIVATE_LINK_LIBRARIES` disabled for header-only library ${_ALIAS_TARGET_NAME}."
72+
)
73+
endif()
6874
add_library(${arg_cpp_lib_NAME} INTERFACE)
75+
target_link_libraries(${arg_cpp_lib_NAME} INTERFACE ${arg_cpp_lib_PUBLIC_LINK_LIBRARIES})
6976
target_include_directories(
7077
${arg_cpp_lib_NAME}
7178
INTERFACE
@@ -82,6 +89,13 @@ function(cpp_library)
8289
${arg_cpp_lib_PUBLIC_HEADERS}
8390
${arg_cpp_lib_PRIVATE_SOURCES}
8491
)
92+
target_link_libraries(
93+
${arg_cpp_lib_NAME}
94+
PUBLIC
95+
${arg_cpp_lib_PUBLIC_LINK_LIBRARIES}
96+
PRIVATE
97+
${arg_cpp_lib_PRIVATE_LINK_LIBRARIES}
98+
)
8599
target_include_directories(
86100
${arg_cpp_lib_NAME}
87101
PUBLIC
@@ -90,13 +104,6 @@ function(cpp_library)
90104
target_compile_features(${arg_cpp_lib_NAME} PUBLIC cxx_std_20)
91105
endif()
92106

93-
target_link_libraries(
94-
${arg_cpp_lib_NAME}
95-
PUBLIC
96-
${arg_cpp_lib_PUBLIC_LINK_LIBRARIES}
97-
PRIVATE
98-
${arg_cpp_lib_PRIVATE_LINK_LIBRARIES}
99-
)
100107
add_library(${_ALIAS_TARGET_NAME} ALIAS ${arg_cpp_lib_NAME})
101108

102109
if(YSTDLIB_CPP_ENABLE_TESTS)

0 commit comments

Comments
 (0)