From fb5d10a2e3f714aaec752db1916aba1a65b1539a Mon Sep 17 00:00:00 2001 From: Olivier Stasse <ostasse@laas.fr> Date: Sat, 2 Nov 2019 10:49:54 +0800 Subject: [PATCH] [cmake] Fix CMake package --- CMakeLists.txt | 182 +++++++++++++++++++++++++-- include/dynamic-graph/CMakeLists.txt | 6 +- src/CMakeLists.txt | 18 ++- tests/CMakeLists.txt | 4 +- 4 files changed, 193 insertions(+), 17 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 656143f..04c95a9 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -9,15 +9,18 @@ SET(PROJECT_DESCRIPTION "Dynamic graph library") SET(PROJECT_URL "http://github.com/${PROJECT_ORG}/${PROJECT_NAME}") SET(PROJECT_SUFFIX "-v3") +# Export CMake Target +SET(PROJECT_USE_CMAKE_EXPORT TRUE) +# Make sure that every header is generated in dynamic-graph +SET(CUSTOM_HEADER_DIR ${PROJECT_NAME}) + INCLUDE(cmake/base.cmake) PROJECT(${PROJECT_NAME} CXX) +INCLUDE(cmake/header.cmake) INCLUDE(cmake/boost.cmake) -INCLUDE(cmake/eigen.cmake) INCLUDE(cmake/pthread.cmake) - -# Export CMake Target -SET(PROJECT_USE_CMAKE_EXPORT TRUE) +add_project_dependency(Eigen3 REQUIRED NO_MODULE) SET(CUSTOM_HEADER_DIR "${PROJECT_NAME}") @@ -33,6 +36,10 @@ GENERATE_CONFIGURATION_HEADER( ${HEADER_DIR} config-tracer-real-time.hh DG_TRACERREALTIME tracer_real_time_EXPORTS) +set(PACKAGE_EXTRA_MACROS + "set (DYNAMIC_GRAPH_PLUGINDIR \${CMAKE_CURRENT_LIST_DIR}/../../plugin)") + +# Specific to PKG module # FIXME: to be changed into lib/dynamic-graph # to avoid name collision when installing dynamic-graph in /usr. SET(PLUGINDIR "${CMAKE_INSTALL_FULL_LIBDIR}/plugin") @@ -48,13 +55,172 @@ PKG_CONFIG_APPEND_LIBS(${PROJECT_NAME}) SET(BOOST_COMPONENTS serialization system unit_test_framework thread) SEARCH_FOR_BOOST() SEARCH_FOR_PTHREAD() +#SEARCH_FOR_EIGEN() -# Search for Boost. -SEARCH_FOR_EIGEN() +# Copyright 2010, Olivier Stasse, JRL, CNRS/AIST +# + +#################################### +### Main Library +#################################### +SET(LIBRARY_NAME ${PROJECT_NAME}) + +# Verbosity level +IF (NOT (\"${CMAKE_VERBOSITY_LEVEL}\" STREQUAL \"\")) + ADD_DEFINITIONS(-DVP_DEBUG_MODE=${CMAKE_VERBOSITY_LEVEL} -DVP_DEBUG) +ENDIF (NOT (\"${CMAKE_VERBOSITY_LEVEL}\" STREQUAL \"\")) + +# Declare boost include directories +#include_directories(${Boost_INCLUDE_DIRS}) +#link_directories(${Boost_LIBRARY_DIRS}) + +ADD_LIBRARY(${LIBRARY_NAME} + SHARED + src/debug/debug.cpp + src/debug/real-time-logger.cpp + src/debug/logger.cpp + + src/dgraph/entity.cpp + src/dgraph/factory.cpp + src/dgraph/pool.cpp + + src/exception/exception-abstract.cpp + src/exception/exception-factory.cpp + src/exception/exception-signal.cpp + src/exception/exception-traces.cpp + + src/mt/process-list.cpp + + src/signal/signal-array.cpp + src/signal/signal-caster.cpp + src/signal/signal-cast-helper.cpp + + src/command/value.cpp + src/command/command.cpp + + ) + +SET(${PROJECT_NAME}_HEADERS + include/dynamic-graph/fwd.hh + include/dynamic-graph/null-ptr.hh + include/dynamic-graph/debug.h + include/dynamic-graph/real-time-logger.h + + include/dynamic-graph/dynamic-graph-api.h + + include/dynamic-graph/entity.h + include/dynamic-graph/factory.h + include/dynamic-graph/pool.h + + include/dynamic-graph/exception-abstract.h + include/dynamic-graph/exception-factory.h + include/dynamic-graph/exception-signal.h + include/dynamic-graph/exception-traces.h + + include/dynamic-graph/signal.h + include/dynamic-graph/signal-array.h + include/dynamic-graph/signal-base.h + include/dynamic-graph/signal-ptr.h + include/dynamic-graph/signal-time-dependent.h + include/dynamic-graph/signal-ptr.t.cpp + include/dynamic-graph/signal.t.cpp + include/dynamic-graph/time-dependency.h + include/dynamic-graph/time-dependency.t.cpp + include/dynamic-graph/signal-caster.h + include/dynamic-graph/signal-cast-helper.h + include/dynamic-graph/all-signals.h + include/dynamic-graph/signal-helper.h + include/dynamic-graph/entity-helper.h + + include/dynamic-graph/tracer.h + include/dynamic-graph/tracer-real-time.h + + include/dynamic-graph/command.h + include/dynamic-graph/eigen-io.h + include/dynamic-graph/linear-algebra.h + include/dynamic-graph/value.h + + include/dynamic-graph/command-setter.h + include/dynamic-graph/command-setter.t.cpp + include/dynamic-graph/command-getter.h + include/dynamic-graph/command-getter.t.cpp + include/dynamic-graph/command-direct-getter.h + include/dynamic-graph/command-direct-setter.h + include/dynamic-graph/command-bind.h + include/dynamic-graph/all-commands.h + + include/dynamic-graph/logger.h +) + +SET(PUBLIC_HEADER ${${PROJECT_NAME}_HEADERS}) + +INSTALL(TARGETS ${PROJECT_NAME} + EXPORT ${TARGETS_EXPORT_NAME} + PUBLIC_HEADER + INCLUDES DESTINATION include + LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} + ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR} + ) + +# We need to include Eigen3 because the CMakeFile at 16.04 LTS +# is not so modern. +target_include_directories(${PROJECT_NAME} + PUBLIC + $<BUILD_INTERFACE:${CMAKE_CURRENT_LIST_DIR}/include> + $<BUILD_INTERFACE:${EIGEN3_INCLUDE_DIR}> + INTERFACE + ${EIGEN3_INCLUDE_DIR} + $<INSTALL_INTERFACE:include> + ) + +SET_TARGET_PROPERTIES(${LIBRARY_NAME} PROPERTIES SOVERSION ${PROJECT_VERSION}) + + +IF (UNIX) + TARGET_LINK_LIBRARIES(${LIBRARY_NAME} ${CMAKE_DL_LIBS} pthread) +ENDIF (UNIX) + +TARGET_LINK_LIBRARIES(${LIBRARY_NAME} ${Boost_LIBRARIES}) + +#IF (UNIX AND NOT APPLE) +# TARGET_LINK_LIBRARIES(${LIBRARY_NAME} ${JRL_MAL_LDFLAGS_OTHER}) +#ENDIF (UNIX AND NOT APPLE) + +#################################### +### Plugins +#################################### +SET(plugins_list + src/traces/tracer + src/traces/tracer-real-time +) + +SET(tracer-real-time_dependency tracer) + +FOREACH(plugin_file ${plugins_list}) + GET_FILENAME_COMPONENT(plugin ${plugin_file} NAME) + ADD_LIBRARY(${plugin} SHARED "${plugin_file}.cpp") + + TARGET_LINK_LIBRARIES(${plugin} + ${PROJECT_NAME} ${${plugin}_dependency} + ${Boost_LIBRARIES}) + + SET_TARGET_PROPERTIES(${plugin} + PROPERTIES + PREFIX "" + ) + + INSTALL(TARGETS ${plugin} EXPORT ${TARGET_NAME} DESTINATION ${PLUGINDIR}) +ENDFOREACH(plugin_file) -ADD_SUBDIRECTORY(src) ADD_SUBDIRECTORY(include/${PROJECT_NAME}) ADD_SUBDIRECTORY(tests) -SETUP_PROJECT_FINALIZE() + +#SETUP_PROJECT_FINALIZE() SETUP_PROJECT_PACKAGE_FINALIZE() + +get_cmake_property(_variableNames VARIABLES) +list (SORT _variableNames) +foreach (_variableName ${_variableNames}) + message(STATUS "${_variableName}=${${_variableName}}") +endforeach() diff --git a/include/dynamic-graph/CMakeLists.txt b/include/dynamic-graph/CMakeLists.txt index 7baf760..5baf981 100644 --- a/include/dynamic-graph/CMakeLists.txt +++ b/include/dynamic-graph/CMakeLists.txt @@ -48,8 +48,6 @@ SET(${PROJECT_NAME}_HEADERS all-commands.h logger.h - ) +) - INSTALL(FILES ${${PROJECT_NAME}_HEADERS} - DESTINATION include/${PROJECT_NAME} - ) +SET(PUBLIC_HEADER ${${PROJECT_NAME}_HEADERS}) diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 5e70828..62ef700 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -12,8 +12,8 @@ IF (NOT (\"${CMAKE_VERBOSITY_LEVEL}\" STREQUAL \"\")) ENDIF (NOT (\"${CMAKE_VERBOSITY_LEVEL}\" STREQUAL \"\")) # Declare boost include directories -include_directories(${Boost_INCLUDE_DIRS}) -link_directories(${Boost_LIBRARY_DIRS}) +#include_directories(${Boost_INCLUDE_DIRS}) +#link_directories(${Boost_LIBRARY_DIRS}) ADD_LIBRARY(${LIBRARY_NAME} SHARED @@ -40,6 +40,18 @@ ADD_LIBRARY(${LIBRARY_NAME} command/command.cpp ) +INSTALL(TARGETS ${PROJECT_NAME} + EXPORT ${TARGETS_EXPORT_NAME} + PUBLIC_HEADER + INCLUDES DESTINATION include/${PROJECT_NAME} + ) + +target_include_directories(${PROJECT_NAME} + PUBLIC + $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}> + $<INSTALL_INTERFACE:include> + ) + SET_TARGET_PROPERTIES(${LIBRARY_NAME} PROPERTIES SOVERSION ${PROJECT_VERSION}) @@ -48,7 +60,7 @@ IF (UNIX) ENDIF (UNIX) TARGET_LINK_LIBRARIES(${LIBRARY_NAME} ${Boost_LIBRARIES}) - +TARGET_LINK_LIBRARIES(${LIBRARY_NAME} Eigen3::Eigen) #IF (UNIX AND NOT APPLE) # TARGET_LINK_LIBRARIES(${LIBRARY_NAME} ${JRL_MAL_LDFLAGS_OTHER}) #ENDIF (UNIX AND NOT APPLE) diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt index 39626ac..d0a2cf6 100644 --- a/tests/CMakeLists.txt +++ b/tests/CMakeLists.txt @@ -4,7 +4,7 @@ ADD_DEFINITIONS(-DDEBUG=2) # Add Boost path to include directories. -INCLUDE_DIRECTORIES(${Boost_INCLUDE_DIRS}) +#INCLUDE_DIRECTORIES(${Boost_INCLUDE_DIRS}) # Make Boost.Test generates the main function in test cases. ADD_DEFINITIONS(-DBOOST_TEST_DYN_LINK -DBOOST_TEST_MAIN) @@ -64,4 +64,4 @@ DYNAMIC_GRAPH_TEST(debug-logger-winit) DYNAMIC_GRAPH_TEST(signal-all) DYNAMIC_GRAPH_TEST(command-test) DYNAMIC_GRAPH_TEST(test-mt) -TARGET_LINK_LIBRARIES(test-mt tracer) \ No newline at end of file +TARGET_LINK_LIBRARIES(test-mt tracer) -- GitLab