Skip to content

Commit aa850e7

Browse files
cmake: Export targets to package config
Export CMake targets to package config via interface libraries. This allows the user to simple depends on this project and thereby gets the additionally dependencies like ZeroMQ automatically. Signed-off-by: Stefan Herbrechtsmeier <[email protected]>
1 parent 1fdf3d1 commit aa850e7

File tree

2 files changed

+41
-5
lines changed

2 files changed

+41
-5
lines changed

CMakeLists.txt

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,10 @@ project(cppzmq)
33

44
find_package(ZeroMQ REQUIRED)
55

6+
if (ZeroMQ_FOUND AND (NOT TARGET libzmq OR NOT TARGET libzmq-static))
7+
message(FATAL_ERROR "ZeroMQ version not supported!")
8+
endif()
9+
610
set (${PROJECT_NAME}_VERSION ${ZeroMQ_VERSION})
711
message(STATUS "cppzmq v${${PROJECT_NAME}_VERSION}")
812

@@ -11,21 +15,40 @@ set(CPPZMQ_HEADERS
1115
zmq_addon.hpp
1216
)
1317

18+
foreach (target cppzmq cppzmq-static)
19+
add_library(${target} INTERFACE)
20+
target_include_directories(${target} INTERFACE $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}>
21+
$<INSTALL_INTERFACE:include>)
22+
endforeach()
23+
24+
target_link_libraries(cppzmq INTERFACE libzmq)
25+
target_link_libraries(cppzmq-static INTERFACE libzmq-static)
26+
1427
include(GNUInstallDirs)
1528
include(CMakePackageConfigHelpers)
1629

30+
install(TARGETS cppzmq cppzmq-static
31+
EXPORT ${PROJECT_NAME}-targets)
32+
1733
install(FILES ${CPPZMQ_HEADERS}
1834
DESTINATION ${CMAKE_INSTALL_INCLUDEDIR})
1935

2036
# GNUInstallDirs "DATADIR" wrong here; CMake search path wants "share".
2137
set(CPPZMQ_CMAKECONFIG_INSTALL_DIR "share/cmake/${PROJECT_NAME}" CACHE STRING "install path for cppzmqConfig.cmake")
2238

39+
if (NOT CMAKE_VERSION VERSION_LESS 3.0)
40+
export(EXPORT ${PROJECT_NAME}-targets
41+
FILE "${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}Targets.cmake")
42+
endif()
2343
configure_package_config_file(${PROJECT_NAME}Config.cmake.in
2444
"${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}Config.cmake"
2545
INSTALL_DESTINATION ${CPPZMQ_CMAKECONFIG_INSTALL_DIR})
2646
write_basic_package_version_file(${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}ConfigVersion.cmake
2747
VERSION ${${PROJECT_NAME}_VERSION}
2848
COMPATIBILITY AnyNewerVersion)
49+
install(EXPORT ${PROJECT_NAME}-targets
50+
FILE ${PROJECT_NAME}Targets.cmake
51+
DESTINATION ${CPPZMQ_CMAKECONFIG_INSTALL_DIR})
2952
install(FILES ${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}Config.cmake
3053
${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}ConfigVersion.cmake
3154
DESTINATION ${CPPZMQ_CMAKECONFIG_INSTALL_DIR})

cppzmqConfig.cmake.in

Lines changed: 18 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,12 @@
11
# cppzmq cmake module
2+
#
3+
# The following import targets are created
4+
#
5+
# ::
6+
#
7+
# cppzmq-static
8+
# cppzmq
9+
#
210
# This module sets the following variables in your project::
311
#
412
# cppzmq_FOUND - true if cppzmq found on the system
@@ -8,8 +16,13 @@
816

917
@PACKAGE_INIT@
1018

11-
set(PN cppzmq)
12-
set_and_check(${PN}_INCLUDE_DIR "${PACKAGE_PREFIX_DIR}/@CMAKE_INSTALL_INCLUDEDIR@")
13-
set_and_check(${PN}_LIBRARY "@ZeroMQ_LIBRARY@")
14-
set_and_check(${PN}_STATIC_LIBRARY "@ZeroMQ_STATIC_LIBRARY@")
15-
check_required_components(${PN})
19+
include(CMakeFindDependencyMacro)
20+
find_dependency(ZeroMQ)
21+
22+
if(NOT TARGET @PROJECT_NAME@)
23+
include("${CMAKE_CURRENT_LIST_DIR}/@[email protected]")
24+
25+
get_target_property(@PROJECT_NAME@_INCLUDE_DIR cppzmq INTERFACE_INCLUDE_DIRECTORIES)
26+
get_target_property(@PROJECT_NAME@_LIBRARY libzmq LOCATION)
27+
get_target_property(@PROJECT_NAME@_STATIC_LIBRARY libzmq-static LOCATION)
28+
endif()

0 commit comments

Comments
 (0)