diff --git a/CMakeLists.txt b/CMakeLists.txt index cb37422..2eeb4a7 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,30 +1,31 @@ -# After installation this project can be found by 'find_package(... CONFIG)' command: +# After installation this project can be found by 'find_package' command: # -# find_package(libcreate CONFIG REQUIRED) -# target_link_libraries(... libcreate::create) +# find_package(libcreate REQUIRED) +# include_directores(${libcreate_INCLUDE_DIRS}) +# target_link_libraries(... ${libcreate_LIBRARIES}) # -# Reference for this file: -# https://github.com/forexample/package-example/blob/cf2ea1d6a209fb9eca2ab83fdd0ac15fe4d3e807/Foo/CMakeLists.txt cmake_minimum_required(VERSION 2.8.12) project(libcreate) -set(package_version 1.4.0) +set(PACKAGE_VERSION 1.5.0) -find_package(Boost REQUIRED system thread) +find_package(Boost REQUIRED COMPONENTS system thread) find_package(Threads REQUIRED) ######### # Build # ######### +set(LIBRARY_NAME create) + # Specify locations of header files include_directories( include ) # Declare cpp library -add_library(create SHARED +add_library(${LIBRARY_NAME} SHARED src/create.cpp src/serial.cpp src/serial_stream.cpp @@ -34,26 +35,18 @@ add_library(create SHARED src/types.cpp ) -# Global includes. Used by all targets -# * header can be included by C++ code `#include ` -target_include_directories( - create PUBLIC - "$" - "$" -) - # Manually link to thread library for build on ARM if(THREADS_HAVE_PTHREAD_ARG) - set_property(TARGET create PROPERTY COMPILE_OPTIONS "-pthread") - set_property(TARGET create PROPERTY INTERFACE_COMPILE_OPTIONS "-pthread") + set_property(TARGET ${LIBRARY_NAME} PROPERTY COMPILE_OPTIONS "-pthread") + set_property(TARGET ${LIBRARY_NAME} PROPERTY INTERFACE_COMPILE_OPTIONS "-pthread") endif() if(CMAKE_THREAD_LIBS_INIT) - target_link_libraries(create "${CMAKE_THREAD_LIBS_INIT}") + target_link_libraries(${LIBRARY_NAME} "${CMAKE_THREAD_LIBS_INIT}") endif() # Link to Boost -target_link_libraries(create +target_link_libraries(${LIBRARY_NAME} ${Boost_LIBRARIES} ) @@ -65,90 +58,93 @@ add_executable(odom_example examples/odom_example.cpp) # Specify libraries to link executable targets against target_link_libraries(create_demo ${Boost_LIBRARIES} - create + ${LIBRARY_NAME} ) target_link_libraries(bumper_example ${Boost_LIBRARIES} - create + ${LIBRARY_NAME} ) target_link_libraries(odom_example ${Boost_LIBRARIES} - create + ${LIBRARY_NAME} +) + +################# +# Configuration # +################# + +# Install directories layout: +# * /lib/ +# * /bin/ +# * /include/ +# * /lib/cmake/ +# * /share/ +set(LIB_INSTALL_DIR "lib") +set(BIN_INSTALL_DIR "bin") +set(INCLUDE_INSTALL_DIR "include") +set(CONFIG_INSTALL_DIR "${LIB_INSTALL_DIR}/cmake/${PROJECT_NAME}") +set(SHARE_INSTALL_DIR "share/${PROJECT_NAME}") + +set(GENERATED_DIR "${CMAKE_CURRENT_BINARY_DIR}/generated") +set(VERSION_CONFIG "${GENERATED_DIR}/${PROJECT_NAME}-config-version.cmake") +set(PROJECT_CONFIG "${GENERATED_DIR}/${PROJECT_NAME}-config.cmake") +set(TARGETS_EXPORT_NAME "${PROJECT_NAME}-targets") + +include(CMakePackageConfigHelpers) + +# Configure '-config-version.cmake' +write_basic_package_version_file( + "${VERSION_CONFIG}" + VERSION "${PACKAGE_VERSION}" + COMPATIBILITY SameMajorVersion +) + +# Configure '-config.cmake' +configure_package_config_file( + "config.cmake.in" + "${PROJECT_CONFIG}" + INSTALL_DESTINATION "${CONFIG_INSTALL_DIR}" + PATH_VARS + INCLUDE_INSTALL_DIR + LIBRARY_NAME ) ########### # Install # ########### -# Layout. This works for all platforms: -# * /lib/cmake/ -# * /lib/ -# * /include/ -set(config_install_dir "lib/cmake/${PROJECT_NAME}") -set(include_install_dir "include") - -set(generated_dir "${CMAKE_CURRENT_BINARY_DIR}/generated") - -# Configuration -set(version_config "${generated_dir}/${PROJECT_NAME}-config-version.cmake") -set(project_config "${generated_dir}/${PROJECT_NAME}-config.cmake") -set(targets_export_name "${PROJECT_NAME}-targets") -set(namespace "${PROJECT_NAME}::") - -# Include module with function 'write_basic_package_version_file' -include(CMakePackageConfigHelpers) - -# Configure '-config-version.cmake' -write_basic_package_version_file( - "${version_config}" - VERSION "${package_version}" - COMPATIBILITY SameMajorVersion -) - -# Configure '-config.cmake' -# Use variables: -# * targets_export_name -# * PROJECT_NAME -configure_package_config_file( - "config.cmake.in" - "${project_config}" - INSTALL_DESTINATION "${config_install_dir}" -) - # Install targets install( - TARGETS create - EXPORT "${targets_export_name}" - ARCHIVE DESTINATION "lib" - LIBRARY DESTINATION "lib" - RUNTIME DESTINATION "bin" - INCLUDES DESTINATION "${include_install_dir}" + TARGETS ${LIBRARY_NAME} + EXPORT "${TARGETS_EXPORT_NAME}" + LIBRARY DESTINATION "${LIB_INSTALL_DIR}" + ARCHIVE DESTINATION "${LIB_INSTALL_DIR}" + RUNTIME DESTINATION "${BIN_INSTALL_DIR}" + INCLUDES DESTINATION "${INCLUDE_INSTALL_DIR}" ) # Install headers -install(DIRECTORY include/create - DESTINATION include +install( + DIRECTORY include/ + DESTINATION ${INCLUDE_INSTALL_DIR} FILES_MATCHING PATTERN "*.h" PATTERN ".svn" EXCLUDE ) # Install config -# * /lib/cmake/libcreate/libcreate-config.cmake -# * /lib/cmake/libcreate/libcreate-config-version.cmake install( - FILES "${project_config}" "${version_config}" - DESTINATION "${config_install_dir}" + FILES "${PROJECT_CONFIG}" "${VERSION_CONFIG}" + DESTINATION "${CONFIG_INSTALL_DIR}" ) -# Install config -# * /lib/cmake/libcreate/libcreate-targets.cmake +# Install targets install( - EXPORT "${targets_export_name}" - NAMESPACE "${namespace}" - DESTINATION "${config_install_dir}" + EXPORT "${TARGETS_EXPORT_NAME}" + DESTINATION "${CONFIG_INSTALL_DIR}" ) # Install package.xml (for catkin) -install(FILES package.xml - DESTINATION share/${PROJECT_NAME} +install( + FILES package.xml + DESTINATION ${SHARE_INSTALL_DIR} ) diff --git a/config.cmake.in b/config.cmake.in index 9b4c9ee..fbd7630 100644 --- a/config.cmake.in +++ b/config.cmake.in @@ -1,4 +1,10 @@ @PACKAGE_INIT@ +find_package(Boost REQUIRED COMPONENTS system thread) +find_package(Threads REQUIRED) -include("${CMAKE_CURRENT_LIST_DIR}/@targets_export_name@.cmake") +include("${CMAKE_CURRENT_LIST_DIR}/@TARGETS_EXPORT_NAME@.cmake") +set_and_check(libcreate_INCLUDE_DIRS "@PACKAGE_INCLUDE_INSTALL_DIR@") +list(APPEND libcreate_INCLUDE_DIRS "${Boost_INCLUDE_DIRS}") +set(libcreate_LIBRARIES "@LIBRARY_NAME@") +list(APPEND libcreate_LIBRARIES "${Boost_LIBRARIES}") check_required_components("@PROJECT_NAME@")