diff --git a/CMakeLists.txt b/CMakeLists.txt index 4c6c26b2..30396eef 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -16,16 +16,44 @@ add_library(${PROJECT_NAME} INTERFACE) target_include_directories(${PROJECT_NAME} SYSTEM INTERFACE $ - $ + $ ) target_link_libraries(${PROJECT_NAME} INTERFACE) # only install if top level project if(${CMAKE_PROJECT_NAME} STREQUAL ${PROJECT_NAME}) - install(TARGETS ${PROJECT_NAME} EXPORT ${PROJECT_NAME}Config) - install(EXPORT ${PROJECT_NAME}Config DESTINATION lib/cmake/${PROJECT_NAME}) - install(DIRECTORY include/${PROJECT_NAME} DESTINATION include) + # Steps here based on excellent guide: https://dominikberner.ch/cmake-interface-lib/ + # Which also details all steps + include(CMakePackageConfigHelpers) + install(TARGETS ${PROJECT_NAME} + EXPORT ${PROJECT_NAME}Targets + ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR} + LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} + RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR} + ) + if(ETL_VERSION) + # Generate the package configuration files using CMake provided macros + write_basic_package_version_file( + "${PROJECT_NAME}ConfigVersion.cmake" + COMPATIBILITY SameMajorVersion + ) + endif() + configure_package_config_file( + "${PROJECT_SOURCE_DIR}/cmake/${PROJECT_NAME}Config.cmake.in" + "${PROJECT_BINARY_DIR}/${PROJECT_NAME}Config.cmake" + INSTALL_DESTINATION + ${CMAKE_INSTALL_DATAROOTDIR}/${PROJECT_NAME}/cmake) + + # Install target file, then package configuration files, and finally the headers + install(EXPORT ${PROJECT_NAME}Targets + FILE ${PROJECT_NAME}Targets.cmake + NAMESPACE ${PROJECT_NAME}:: + DESTINATION ${CMAKE_INSTALL_DATAROOTDIR}/${PROJECT_NAME}/cmake) + install(FILES "${PROJECT_BINARY_DIR}/${PROJECT_NAME}Config.cmake" + "${PROJECT_BINARY_DIR}/${PROJECT_NAME}ConfigVersion.cmake" + DESTINATION ${CMAKE_INSTALL_DATAROOTDIR}/${PROJECT_NAME}/cmake) + install(DIRECTORY ${PROJECT_SOURCE_DIR}/include/etl DESTINATION include) endif() if (BUILD_TESTS) diff --git a/cmake/etlConfig.cmake.in b/cmake/etlConfig.cmake.in new file mode 100644 index 00000000..9c15f36a --- /dev/null +++ b/cmake/etlConfig.cmake.in @@ -0,0 +1,4 @@ +@PACKAGE_INIT@ + +include("${CMAKE_CURRENT_LIST_DIR}/@PROJECT_NAME@Targets.cmake") +check_required_components("@PROJECT_NAME@")