From b7375b5fd9c2f19bc736e5588edb52b703e72262 Mon Sep 17 00:00:00 2001 From: Mederic Fourmy <mederic.fourmy@gmail.com> Date: Thu, 5 May 2022 16:25:33 +0200 Subject: [PATCH] Finish switch to cmake refactoring --- CMakeLists.txt | 80 +++++++++++++++---------- cmake_modules/gnss_utilsConfig.cmake.in | 13 ++++ 2 files changed, 62 insertions(+), 31 deletions(-) create mode 100644 cmake_modules/gnss_utilsConfig.cmake.in diff --git a/CMakeLists.txt b/CMakeLists.txt index d36785f..be7e529 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -2,13 +2,7 @@ MESSAGE("Starting gnss-utils CMakeLists ...") # Pre-requisites about cmake itself -CMAKE_MINIMUM_REQUIRED(VERSION 2.8) - -if(COMMAND cmake_policy) - cmake_policy(SET CMP0005 NEW) - cmake_policy(SET CMP0003 NEW) - -endif(COMMAND cmake_policy) +CMAKE_MINIMUM_REQUIRED(VERSION 3.10) # MAC OSX RPATH set(CMAKE_MACOSX_RPATH true) @@ -18,7 +12,8 @@ PROJECT(gnss_utils) SET(EXECUTABLE_OUTPUT_PATH ${CMAKE_CURRENT_SOURCE_DIR}/bin) SET(LIBRARY_OUTPUT_PATH ${CMAKE_CURRENT_SOURCE_DIR}/lib) -SET(CMAKE_INSTALL_PREFIX /usr/local) +set(INCLUDE_INSTALL_DIR include/iri-algorithms) +set(LIB_INSTALL_DIR lib/) IF (NOT CMAKE_BUILD_TYPE) SET(CMAKE_BUILD_TYPE "RELEASE") @@ -45,12 +40,6 @@ endif() set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fpermissive") -FIND_PACKAGE(Eigen3 3.3 REQUIRED) -IF(Eigen3_FOUND) - INCLUDE_DIRECTORIES(${EIGEN3_INCLUDE_DIRS}) -ENDIF(Eigen3_FOUND) - - # Testing IF(NOT BUILD_TESTS) OPTION(BUILD_TESTS "Build Unit tests" ON) @@ -84,14 +73,13 @@ message("CONFIG DIRECTORY ${PROJECT_BINARY_DIR}") include_directories("${PROJECT_BINARY_DIR}/conf") # rtklib path -SET(RTKLIB_DIR deps/RTKLIB) -SET(RTKLIB_SRC_DIR ${RTKLIB_DIR}/src) +SET(RTKLIB_SRC_DIR deps/RTKLIB/src) # driver source files SET(SOURCES src/navigation.cpp src/observations.cpp - src/range.cpp + src/range.cpp src/receiver_raw_base.cpp src/receivers/ublox_raw.cpp src/receivers/novatel_raw.cpp @@ -135,36 +123,66 @@ SET(RTKLIB_SRC # NOT SET SINCE WE COPY THE WHOLE include FOLDER # Eigen ####### -FIND_PACKAGE(Eigen3 REQUIRED) - -# Adding libraries' directories -link_directories(/usr/lib/x86_64-linux-gnu/) +FIND_PACKAGE(Eigen3 3.3 REQUIRED) # Adding include directories -INCLUDE_DIRECTORIES(include/ ${EIGEN3_INCLUDE_DIR} ${Boost_INCLUDE_DIRS} ${RTKLIB_SRC_DIR}) +INCLUDE_DIRECTORIES(BEFORE include ${RTKLIB_SRC_DIR}) # create the shared library ADD_LIBRARY(gnss_utils SHARED ${SOURCES} ${RTKLIB_SRC}) -TARGET_LINK_LIBRARIES(gnss_utils ${Boost_LIBRARIES}) + +# Link this library wrt. its dependencies +TARGET_LINK_LIBRARIES(gnss_utils Eigen3::Eigen) # Examples ADD_SUBDIRECTORY(src/examples) + # Testing if(BUILD_TESTS) add_subdirectory(test) endif() # Installing -INSTALL(TARGETS ${PROJECT_NAME} - RUNTIME DESTINATION bin - LIBRARY DESTINATION lib - ARCHIVE DESTINATION lib) -INSTALL(DIRECTORY include/gnss_utils DESTINATION include/iri-algorithms) -INSTALL(FILES ${RTKLIB_SRC_DIR}/rtklib.h DESTINATION include/iri-algorithms/gnss_utils) -INSTALL(FILES Findgnss_utils.cmake DESTINATION ${CMAKE_ROOT}/Modules/) +INSTALL(TARGETS ${PROJECT_NAME} EXPORT ${PROJECT_NAME}Targets + RUNTIME DESTINATION bin + LIBRARY DESTINATION ${LIB_INSTALL_DIR} + ARCHIVE DESTINATION ${LIB_INSTALL_DIR} +) +install(EXPORT ${PROJECT_NAME}Targets DESTINATION lib/${PROJECT_NAME}/cmake) + +#Â Configure the package installation +include(CMakePackageConfigHelpers) +configure_package_config_file( + ${CMAKE_SOURCE_DIR}/cmake_modules/${PROJECT_NAME}Config.cmake.in + ${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}Config.cmake + INSTALL_DESTINATION ${LIB_INSTALL_DIR}/${PROJECT_NAME}/cmake + PATH_VARS INCLUDE_INSTALL_DIR LIB_INSTALL_DIR +) + +install( + FILES + ${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}Config.cmake + DESTINATION + ${LIB_INSTALL_DIR}/${PROJECT_NAME}/cmake +) + +# Specifies include directories to use when compiling the plugin target +# This way, include_directories does not need to be called in plugins depending on this one +target_include_directories(${PROJECT_NAME} INTERFACE + $<INSTALL_INTERFACE:${INCLUDE_INSTALL_DIR}> +) + +INSTALL(DIRECTORY include/gnss_utils DESTINATION ${INCLUDE_INSTALL_DIR}) + +INSTALL(FILES ${RTKLIB_SRC_DIR}/rtklib.h DESTINATION ${INCLUDE_INSTALL_DIR}/gnss_utils) + INSTALL(FILES "${GNSS_UTILS_CONFIG_DIR}/config.h" - DESTINATION include/iri-algorithms/gnss_utils/internal) + DESTINATION ${INCLUDE_INSTALL_DIR}/gnss_utils/internal) + +############### +# Documentation +############### FIND_PACKAGE(Doxygen) FIND_PATH(IRI_DOC_DIR doxygen.conf ${CMAKE_SOURCE_DIR}/doc/iri_doc/) diff --git a/cmake_modules/gnss_utilsConfig.cmake.in b/cmake_modules/gnss_utilsConfig.cmake.in new file mode 100644 index 0000000..ae01299 --- /dev/null +++ b/cmake_modules/gnss_utilsConfig.cmake.in @@ -0,0 +1,13 @@ +set(@PROJECT_NAME@_VERSION 0.0.1) + + +@PACKAGE_INIT@ + +set_and_check(@PROJECT_NAME@_INCLUDE_DIR "@PACKAGE_INCLUDE_INSTALL_DIR@") +set(@PROJECT_NAME@_INCLUDE_DIRS @PROJECT_NAME@_INCLUDE_DIR) +set_and_check(@PROJECT_NAME@_LIB_INSTALL_DIR "@PACKAGE_LIB_INSTALL_DIR@") +set(@PROJECT_NAME@_LIB_INSTALL_DIRS @PROJECT_NAME@_LIB_INSTALL_DIR) + +include("${CMAKE_CURRENT_LIST_DIR}/@PROJECT_NAME@Targets.cmake") + +check_required_components(@PROJECT_NAME@) \ No newline at end of file -- GitLab