@@ -23,26 +23,24 @@ if(UTHREAD)
2323endif ()
2424
2525# If there is no Uthread, async_simple is a header only library
26- if (NOT UTHREAD)
27- add_library (async_simple INTERFACE ${SRCS} )
28- target_link_libraries (async_simple INTERFACE libasync_simple)
29- install (TARGETS async_simple DESTINATION lib/)
30- elseif (NOT CMAKE_CXX_COMPILER_ID MATCHES "MSVC" )
26+ if (UTHREAD)
3127 add_library (async_simple_static STATIC ${SRCS} )
3228 add_library (async_simple SHARED ${SRCS} )
33- target_link_libraries (async_simple PUBLIC libasync_simple)
34- target_link_libraries (async_simple_static PUBLIC libasync_simple)
35-
36- set_target_properties (async_simple_static PROPERTIES OUTPUT_NAME "async_simple" )
37-
38- install (TARGETS async_simple DESTINATION lib/)
39- install (TARGETS async_simple_static DESTINATION lib/)
29+ target_link_libraries (async_simple PUBLIC async_simple_header_only)
30+ target_link_libraries (async_simple_static PUBLIC async_simple_header_only)
31+ install (TARGETS async_simple EXPORT async_simple_targets DESTINATION lib/)
32+ install (TARGETS async_simple_static EXPORT async_simple_targets DESTINATION lib/)
4033else ()
41- add_library (async_simple STATIC ${SRCS} )
42- target_link_libraries (async_simple PUBLIC libasync_simple)
43- install (TARGETS async_simple DESTINATION lib/)
34+ add_library (async_simple_static INTERFACE )
35+ target_link_libraries (async_simple_static INTERFACE async_simple_header_only)
36+ install (TARGETS async_simple_static EXPORT async_simple_targets DESTINATION lib/)
37+ add_library (async_simple INTERFACE )
38+ target_link_libraries (async_simple INTERFACE async_simple_header_only)
39+ install (TARGETS async_simple EXPORT async_simple_targets DESTINATION lib/)
4440endif ()
4541
42+ install (TARGETS async_simple_header_only EXPORT async_simple_targets)
43+
4644set_target_properties (async_simple PROPERTIES
4745 VERSION ${PROJECT_VERSION}
4846 SOVERSION ${PROJECT_VERSION_MAJOR} )
@@ -57,6 +55,23 @@ if(UTHREAD)
5755 install (FILES ${uthread_internal_header} DESTINATION include /async_simple/uthread/internal )
5856endif ()
5957
58+ install (EXPORT async_simple_targets
59+ FILE async_simple-targets.cmake
60+ NAMESPACE async_simple::
61+ DESTINATION share/async_simple)
62+
63+ # Generate the config file in the current binary dir (this ensures it's not placed directly in source)
64+ file (WRITE "${CMAKE_CURRENT_BINARY_DIR} /async_simple-config.cmake"
65+ "include(CMakeFindDependencyMacro)\n "
66+ "find_package(Threads REQUIRED)\n "
67+ "include(\"\$ {CMAKE_CURRENT_LIST_DIR}/async_simple-targets.cmake\" )\n "
68+ )
69+
70+ # Install the generated config file
71+ install (FILES "${CMAKE_CURRENT_BINARY_DIR} /async_simple-config.cmake"
72+ DESTINATION share/async_simple)
73+
74+
6075if (${ASYNC_SIMPLE_ENABLE_TESTS} )
6176 add_subdirectory (test )
6277 add_subdirectory (util/test )
@@ -66,6 +81,3 @@ if (${ASYNC_SIMPLE_ENABLE_TESTS})
6681 add_subdirectory (uthread/test )
6782 endif ()
6883endif ()
69- if (NOT TARGET async_simple::async_simple_header_only)
70- add_library (async_simple::async_simple_header_only ALIAS libasync_simple)
71- endif ()
0 commit comments