From ec3d6b36da7edc2718d7509b82e48c0746888ccd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Gonzalve?= Date: Wed, 5 Oct 2022 20:15:39 +0200 Subject: [PATCH] Use cannonical library name for eigen --- CMakeLists.txt | 2 -- cmake/HandleEigen.cmake | 26 +++++++++++++++++++++----- gtsam/CMakeLists.txt | 7 ++----- 3 files changed, 23 insertions(+), 12 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 74433f333..39d1e4307 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -101,8 +101,6 @@ if(GTSAM_BUILD_PYTHON OR GTSAM_INSTALL_MATLAB_TOOLBOX) # Copy matlab.h to the correct folder. configure_file(${PROJECT_SOURCE_DIR}/wrap/matlab.h ${PROJECT_BINARY_DIR}/wrap/matlab.h COPYONLY) - # Add the include directories so that matlab.h can be found - include_directories("${PROJECT_BINARY_DIR}" "${GTSAM_EIGEN_INCLUDE_FOR_BUILD}") add_subdirectory(wrap) list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_LIST_DIR}/wrap/cmake") diff --git a/cmake/HandleEigen.cmake b/cmake/HandleEigen.cmake index c49eb4f8e..887ae1748 100644 --- a/cmake/HandleEigen.cmake +++ b/cmake/HandleEigen.cmake @@ -16,8 +16,14 @@ endif() if(GTSAM_USE_SYSTEM_EIGEN) find_package(Eigen3 REQUIRED) # need to find again as REQUIRED - # Use generic Eigen include paths e.g. - set(GTSAM_EIGEN_INCLUDE_FOR_INSTALL "${EIGEN3_INCLUDE_DIR}") + add_library(Eigen3::Eigen INTERFACE IMPORTED) + + set_target_properties(Eigen3::Eigen PROPERTIES + INTERFACE_INCLUDE_DIRECTORIES ${EIGEN3_INCLUDE_DIR} + ) + + # The actual include directory (for BUILD cmake target interface): + set(GTSAM_EIGEN_INCLUDE_FOR_BUILD "${EIGEN3_INCLUDE_DIR}/") # check if MKL is also enabled - can have one or the other, but not both! # Note: Eigen >= v3.2.5 includes our patches @@ -30,9 +36,6 @@ if(GTSAM_USE_SYSTEM_EIGEN) if(EIGEN_USE_MKL_ALL AND (EIGEN3_VERSION VERSION_EQUAL 3.3.4)) message(FATAL_ERROR "MKL does not work with Eigen 3.3.4 because of a bug in Eigen. See http://eigen.tuxfamily.org/bz/show_bug.cgi?id=1527. Disable GTSAM_USE_SYSTEM_EIGEN to use GTSAM's copy of Eigen, disable GTSAM_WITH_EIGEN_MKL, or upgrade/patch your installation of Eigen.") endif() - - # The actual include directory (for BUILD cmake target interface): - set(GTSAM_EIGEN_INCLUDE_FOR_BUILD "${EIGEN3_INCLUDE_DIR}") else() # Use bundled Eigen include path. # Clear any variables set by FindEigen3 @@ -46,6 +49,19 @@ else() # The actual include directory (for BUILD cmake target interface): set(GTSAM_EIGEN_INCLUDE_FOR_BUILD "${GTSAM_SOURCE_DIR}/gtsam/3rdparty/Eigen/") + + add_library(gtsam_eigen3 INTERFACE) + + target_include_directories(gtsam_eigen3 INTERFACE + $ + $ + ) + add_library(Eigen3::Eigen ALIAS gtsam_eigen3) + + install(TARGETS gtsam_eigen3 EXPORT GTSAM-exports PUBLIC_HEADER DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}) + + list(APPEND GTSAM_EXPORTED_TARGETS gtsam_eigen3) + set(GTSAM_EXPORTED_TARGETS "${GTSAM_EXPORTED_TARGETS}" PARENT_SCOPE) endif() # Detect Eigen version: diff --git a/gtsam/CMakeLists.txt b/gtsam/CMakeLists.txt index 09f1ea806..d3408ee7f 100644 --- a/gtsam/CMakeLists.txt +++ b/gtsam/CMakeLists.txt @@ -117,12 +117,9 @@ set_target_properties(gtsam PROPERTIES VERSION ${gtsam_version} SOVERSION ${gtsam_soversion}) -# Append Eigen include path, set in top-level CMakeLists.txt to either # system-eigen, or GTSAM eigen path -target_include_directories(gtsam PUBLIC - $ - $ -) +target_link_libraries(gtsam PUBLIC Eigen3::Eigen) + # MKL include dir: if (GTSAM_USE_EIGEN_MKL) target_include_directories(gtsam PUBLIC ${MKL_INCLUDE_DIR})