diff --git a/CMakeLists.txt b/CMakeLists.txt index 8508317cb319d80743e7b8ee9fc4724480b640bf..4eca70542a3fd8a016959fea5ae3fcceb0551b0b 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -15,22 +15,25 @@ include(GNUInstallDirs) set(CMAKE_CXX_STANDARD 11) # Third Party Dependencies -find_package(GSL REQUIRED) -find_package(Eigen3 3.3 REQUIRED NO_MODULE) -find_package(Python REQUIRED COMPONENTS Development) +find_package(GSL REQUIRED) +find_package(Eigen3 3.3 REQUIRED NO_MODULE) +find_package(Python REQUIRED COMPONENTS Development) find_package(nlohmann_json REQUIRED) # Library setup add_library(ale SHARED ${CMAKE_CURRENT_SOURCE_DIR}/src/ale.cpp) +# Alias a scoped target for safer linking in downstream projects +set(ALE_HEADERS "include/ale.h") set_target_properties(ale PROPERTIES - VERSION ${PROJECT_VERSION} - SOVERSION 1) -set(ALE_INCLUDE_DIRS "${CMAKE_CURRENT_SOURCE_DIR}/include/") - + VERSION ${PROJECT_VERSION} + SOVERSION 0 + PUBLIC_HEADER ${ALE_HEADERS}) +# Use generator expressions so that downstream projects can use this target target_include_directories(ale PUBLIC - ${ALE_INCLUDE_DIRS}) + $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include> + $<INSTALL_INTERFACE:include>) target_link_libraries(ale PRIVATE @@ -60,6 +63,22 @@ if(BUILD_TESTS) endif() endif() -# Install commands -install(TARGETS ale LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}) -install(DIRECTORY ${ALE_INCLUDE_DIRS} DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}) +# Generate the package config +configure_file(cmake/config.cmake.in + ${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}-config.cmake + @ONLY) + +# Install the package config +install(FILES ${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}-config.cmake + DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/${PROJECT_NAME}) + +# Install the library +install(TARGETS ale + EXPORT aleTargets + LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} + PUBLIC_HEADER DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}) + +# Install the target +install(EXPORT aleTargets + NAMESPACE ale:: + DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/${PROJECT_NAME}) diff --git a/cmake/config.cmake.in b/cmake/config.cmake.in new file mode 100644 index 0000000000000000000000000000000000000000..c223d95f1b1151f594611a979ae3b82b13f2560d --- /dev/null +++ b/cmake/config.cmake.in @@ -0,0 +1,7 @@ +include(FindPackageHandleStandardArgs) +set(${CMAKE_FIND_PACKAGE_NAME}_CONFIG ${CMAKE_CURRENT_LIST_FILE}) +find_package_handle_standard_args(@PROJECT_NAME@ CONFIG_MODE) + +if(NOT TARGET @PROJECT_NAME@::ale) + include("${CMAKE_CURRENT_LIST_DIR}/aleTargets.cmake") +endif()