From 80bdf9342f7013f31cfdb66596d3bb3bb64492ee Mon Sep 17 00:00:00 2001 From: Andre Phu-Van Nguyen Date: Sat, 15 Jun 2019 17:31:29 -0400 Subject: [PATCH] fix compatibility with find package --- CMakeLists.txt | 57 ++++++++++++++++++++++++++++++----------- cxxopts-config.cmake.in | 4 ++- 2 files changed, 45 insertions(+), 16 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 440490b..18c58d3 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -65,17 +65,26 @@ if(CXXOPTS_USE_UNICODE_HELP) target_compile_definitions(cxxopts INTERFACE CXXOPTS_USE_UNICODE) endif() -target_include_directories(cxxopts INTERFACE - $ - $ +set(PROJECT_PREFIX ${PROJECT_NAME}-${${PROJECT_NAME}_VERSION}) + +target_include_directories(cxxopts + INTERFACE + $ + $ ) +set(install_runtime_dir ${CMAKE_INSTALL_BINDIR}) +set(install_config_dir ${CMAKE_INSTALL_LIBDIR}/${PROJECT_PREFIX}/cmake) +set(install_library_dir ${CMAKE_INSTALL_LIBDIR}/${PROJECT_PREFIX}/${CMAKE_BUILD_TYPE}) +set(install_archive_dir ${CMAKE_INSTALL_LIBDIR}/${PROJECT_PREFIX}/${CMAKE_BUILD_TYPE}/static) +set(install_include_dir ${CMAKE_INSTALL_INCLUDEDIR}/${PROJECT_PREFIX}/${PROJECT_NAME}) + include(CMakePackageConfigHelpers) set(CXXOPTS_CMAKE_DIR "lib/cmake/cxxopts" CACHE STRING "Installation directory for cmake files, relative to ${CMAKE_INSTALL_PREFIX}.") -set(version_config "${PROJECT_BINARY_DIR}/cxxopts-config-version.cmake") -set(project_config "${PROJECT_BINARY_DIR}/cxxopts-config.cmake") -set(targets_export_name cxxopts-targets) +set(version_config "${PROJECT_BINARY_DIR}/${PROJECT_NAME}-config-version.cmake") +set(project_config "${PROJECT_BINARY_DIR}/${PROJECT_NAME}-config.cmake") +set(targets_export_name ${PROJECT_NAME}-targets) # Generate the version, config and target files into the build directory. write_basic_package_version_file( @@ -83,22 +92,40 @@ write_basic_package_version_file( VERSION ${VERSION} COMPATIBILITY AnyNewerVersion) configure_package_config_file( - ${PROJECT_SOURCE_DIR}/cxxopts-config.cmake.in - ${project_config} - INSTALL_DESTINATION ${CXXOPTS_CMAKE_DIR}) -export(TARGETS cxxopts NAMESPACE cxxopts:: - FILE ${PROJECT_BINARY_DIR}/${targets_export_name}.cmake) + ${PROJECT_NAME}-config.cmake.in + ${project_config} + INSTALL_DESTINATION ${install_config_dir}) + +install(TARGETS ${PROJECT_NAME} + EXPORT ${PROJECT_NAME}-targets + RUNTIME DESTINATION ${install_runtime_dir} + LIBRARY DESTINATION ${install_library_dir} + ARCHIVE DESTINATION ${install_archive_dir}) + +install(EXPORT ${PROJECT_NAME}-targets + FILE ${PROJECT_NAME}-targets.cmake + NAMESPACE ${PROJECT_NAME}:: + DESTINATION ${install_config_dir}) + +export(EXPORT ${PROJECT_NAME}-targets + FILE ${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}-targets.cmake + NAMESPACE ${PROJECT_NAME}::) + +export(PACKAGE ${PROJECT_NAME}) # Install version, config and target files. install( FILES ${project_config} ${version_config} DESTINATION ${CXXOPTS_CMAKE_DIR}) -install(EXPORT ${targets_export_name} DESTINATION ${CXXOPTS_CMAKE_DIR} +install( + EXPORT ${targets_export_name} + DESTINATION ${CXXOPTS_CMAKE_DIR} NAMESPACE cxxopts::) -# Install the header file and export the target -install(TARGETS cxxopts EXPORT ${targets_export_name} DESTINATION lib) -install(FILES ${PROJECT_SOURCE_DIR}/include/cxxopts.hpp DESTINATION include) +# Install the header file +install( + FILES ${PROJECT_SOURCE_DIR}/include/cxxopts.hpp + DESTINATION ${install_include_dir}) add_subdirectory(src) add_subdirectory(test) diff --git a/cxxopts-config.cmake.in b/cxxopts-config.cmake.in index c9efaf1..4318634 100644 --- a/cxxopts-config.cmake.in +++ b/cxxopts-config.cmake.in @@ -1,4 +1,6 @@ @PACKAGE_INIT@ -include(${CMAKE_CURRENT_LIST_DIR}/@targets_export_name@.cmake) +if(NOT TARGET cxxopts::cxxopts) + include(${CMAKE_CURRENT_LIST_DIR}/@targets_export_name@.cmake) +endif() check_required_components(cxxopts)