Use Eigen3::Eigen target
Since version 3.3 Eigen provides Eigen3Config.cmake with the imported
target Eigen3::Eigen. [1]
Use this imported target as descibed in Eigen-Wiki [2]
In the CeresConfig file improve relocatability by removing absolute
paths to the compiled dependencies. Instead find the used Eigen3::Eigen.
Furthermore use the find_dependency() [4] CMake function instead of the
find_package() call in CeresConfig.
This commit relies on all targets to be explicitly linked private or
public as done in the the change [3]
[1] https://bitbucket.org/eigen/eigen/pull-requests/257/cmake-imported-target-take-2/diff
[2] https://eigen.tuxfamily.org/dox/TopicCMakeGuide.html
[3] https://ceres-solver-review.googlesource.com/c/ceres-solver/+/16220
[4] https://cmake.org/cmake/help/latest/module/CMakeFindDependencyMacro.html
Change-Id: I44f44a089083f7169bcf430b59775242e4eb72d1
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 48d01de..c73b5f2 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -62,6 +62,26 @@
"${CMAKE_CXX_COMPILER_VERSION}. Ceres requires at least MSVC 2013 Update 4+")
endif()
+# On macOS, add the Homebrew prefix (with appropriate suffixes) to the
+# respective HINTS directories (after any user-specified locations). This
+# handles Homebrew installations into non-standard locations (not /usr/local).
+# We do not use CMAKE_PREFIX_PATH for this as given the search ordering of
+# find_xxx(), doing so would override any user-specified HINTS locations with
+# the Homebrew version if it exists.
+if (CMAKE_SYSTEM_NAME MATCHES "Darwin")
+ find_program(HOMEBREW_EXECUTABLE brew)
+ mark_as_advanced(FORCE HOMEBREW_EXECUTABLE)
+ if (HOMEBREW_EXECUTABLE)
+ # Detected a Homebrew install, query for its install prefix.
+ execute_process(COMMAND ${HOMEBREW_EXECUTABLE} --prefix
+ OUTPUT_VARIABLE HOMEBREW_INSTALL_PREFIX
+ OUTPUT_STRIP_TRAILING_WHITESPACE)
+ message(STATUS "Detected Homebrew with install prefix: "
+ "${HOMEBREW_INSTALL_PREFIX}, adding to CMake search paths.")
+ list(APPEND HOMEBREW_INCLUDE_DIR_HINTS "${HOMEBREW_INSTALL_PREFIX}/include")
+ endif()
+endif()
+
project(Ceres C CXX)
# NOTE: The 'generic' CMake variables CMAKE_[SOURCE/BINARY]_DIR should not be
@@ -218,40 +238,29 @@
message("-- Building with C++${CMAKE_CXX_STANDARD}")
# Eigen.
-find_package(Eigen REQUIRED)
-if (EIGEN_FOUND)
- message("-- Found Eigen version ${EIGEN_VERSION}: ${EIGEN_INCLUDE_DIRS}")
- if (EIGEN_VERSION VERSION_LESS 3.1.0)
- message(FATAL_ERROR "-- Ceres requires Eigen version >= 3.1.0 in order "
- "that Eigen/SparseCore be available, detected version of Eigen is: "
- "${EIGEN_VERSION}")
- endif (EIGEN_VERSION VERSION_LESS 3.1.0)
-
+# Eigen delivers Eigen3Config.cmake since v3.3.3
+find_package(Eigen3 3.3 CONFIG REQUIRED
+ HINTS ${HOMEBREW_INCLUDE_DIR_HINTS})
+if (EIGEN3_FOUND)
+ message("-- Found Eigen version ${EIGEN3_VERSION_STRING}: ${EIGEN3_INCLUDE_DIRS}")
if (CMAKE_SYSTEM_PROCESSOR MATCHES "^(aarch64.*|AARCH64.*)" AND
- EIGEN_VERSION VERSION_LESS 3.3.4)
+ EIGEN3_VERSION_STRING VERSION_LESS 3.3.4)
# As per issue #289: https://github.com/ceres-solver/ceres-solver/issues/289
# the bundle_adjustment_test will fail for Eigen < 3.3.4 on aarch64.
message(FATAL_ERROR "-- Ceres requires Eigen version >= 3.3.4 on aarch64. "
- "Detected version of Eigen is: ${EIGEN_VERSION}.")
+ "Detected version of Eigen is: ${EIGEN3_VERSION_STRING}.")
endif()
if (EIGENSPARSE)
message("-- Enabling use of Eigen as a sparse linear algebra library.")
list(APPEND CERES_COMPILE_OPTIONS CERES_USE_EIGEN_SPARSE)
- if (EIGEN_VERSION VERSION_LESS 3.2.2)
- message(" WARNING:")
- message("")
- message(" Your version of Eigen (${EIGEN_VERSION}) is older than ")
- message(" version 3.2.2. The performance of SPARSE_NORMAL_CHOLESKY ")
- message(" and SPARSE_SCHUR linear solvers will suffer.")
- endif (EIGEN_VERSION VERSION_LESS 3.2.2)
else (EIGENSPARSE)
message("-- Disabling use of Eigen as a sparse linear algebra library.")
message(" This does not affect the covariance estimation algorithm ")
message(" which can still use the EIGEN_SPARSE_QR algorithm.")
add_definitions(-DEIGEN_MPL2_ONLY)
endif (EIGENSPARSE)
-endif (EIGEN_FOUND)
+endif (EIGEN3_FOUND)
if (LAPACK)
find_package(LAPACK QUIET)
@@ -751,7 +760,6 @@
RENAME CeresConfig.cmake
DESTINATION ${RELATIVE_CMAKECONFIG_INSTALL_DIR})
install(FILES "${Ceres_BINARY_DIR}/CeresConfigVersion.cmake"
- "${Ceres_SOURCE_DIR}/cmake/FindEigen.cmake"
"${Ceres_SOURCE_DIR}/cmake/FindGlog.cmake"
"${Ceres_SOURCE_DIR}/cmake/FindGflags.cmake"
DESTINATION ${RELATIVE_CMAKECONFIG_INSTALL_DIR})
diff --git a/cmake/CeresConfig.cmake.in b/cmake/CeresConfig.cmake.in
index 104e32d..37f8d52 100644
--- a/cmake/CeresConfig.cmake.in
+++ b/cmake/CeresConfig.cmake.in
@@ -60,6 +60,8 @@
# CMake target already includes the definition of its public
# include directories.
+include(CMakeFindDependencyMacro)
+
# Called if we failed to find Ceres or any of its required dependencies,
# unsets all public (designed to be used externally) variables and reports
# error message at priority depending upon [REQUIRED/QUIET/<NONE>] argument.
@@ -166,38 +168,30 @@
# Eigen.
# Flag set during configuration and build of Ceres.
-set(CERES_EIGEN_VERSION @EIGEN_VERSION@)
-set(EIGEN_WAS_BUILT_WITH_CMAKE @FOUND_INSTALLED_EIGEN_CMAKE_CONFIGURATION@)
-# Append the locations of Eigen when Ceres was built to the search path hints.
-if (EIGEN_WAS_BUILT_WITH_CMAKE)
- set(Eigen3_DIR "@Eigen3_DIR@")
- set(EIGEN_PREFER_EXPORTED_EIGEN_CMAKE_CONFIGURATION TRUE)
-else()
- list(APPEND EIGEN_INCLUDE_DIR_HINTS "@EIGEN_INCLUDE_DIR@")
-endif()
+set(CERES_EIGEN_VERSION @EIGEN3_VERSION_STRING@)
# Search quietly to control the timing of the error message if not found. The
# search should be for an exact match, but for usability reasons do a soft
# match and reject with an explanation below.
-find_package(Eigen ${CERES_EIGEN_VERSION} QUIET)
-if (EIGEN_FOUND)
- if (NOT EIGEN_VERSION VERSION_EQUAL CERES_EIGEN_VERSION)
+find_dependency(Eigen3 ${CERES_EIGEN_VERSION} CONFIG QUIET)
+if (EIGEN3_FOUND)
+ if (NOT EIGEN3_VERSION_STRING VERSION_EQUAL CERES_EIGEN_VERSION)
# CMake's VERSION check in FIND_PACKAGE() will accept any version >= the
# specified version. However, only version = is supported. Improve
# usability by explaining why we don't accept non-exact version matching.
ceres_report_not_found("Found Eigen dependency, but the version of Eigen "
- "found (${EIGEN_VERSION}) does not exactly match the version of Eigen "
+ "found (${EIGEN3_VERSION_STRING}) does not exactly match the version of Eigen "
"Ceres was compiled with (${CERES_EIGEN_VERSION}). This can cause subtle "
"bugs by triggering violations of the One Definition Rule. See the "
"Wikipedia article http://en.wikipedia.org/wiki/One_Definition_Rule "
"for more details")
endif ()
message(STATUS "Found required Ceres dependency: "
- "Eigen version ${CERES_EIGEN_VERSION} in ${EIGEN_INCLUDE_DIRS}")
-else (EIGEN_FOUND)
+ "Eigen version ${CERES_EIGEN_VERSION} in ${EIGEN3_INCLUDE_DIRS}")
+else (EIGEN3_FOUND)
ceres_report_not_found("Missing required Ceres "
"dependency: Eigen version ${CERES_EIGEN_VERSION}, please set "
- "EIGEN_INCLUDE_DIR.")
-endif (EIGEN_FOUND)
+ "Eigen3_DIR.")
+endif (EIGEN3_FOUND)
# Glog.
# Flag set during configuration and build of Ceres.
diff --git a/cmake/FindEigen.cmake b/cmake/FindEigen.cmake
deleted file mode 100644
index d1fa6d7..0000000
--- a/cmake/FindEigen.cmake
+++ /dev/null
@@ -1,284 +0,0 @@
-# Ceres Solver - A fast non-linear least squares minimizer
-# Copyright 2015 Google Inc. All rights reserved.
-# http://ceres-solver.org/
-#
-# Redistribution and use in source and binary forms, with or without
-# modification, are permitted provided that the following conditions are met:
-#
-# * Redistributions of source code must retain the above copyright notice,
-# this list of conditions and the following disclaimer.
-# * Redistributions in binary form must reproduce the above copyright notice,
-# this list of conditions and the following disclaimer in the documentation
-# and/or other materials provided with the distribution.
-# * Neither the name of Google Inc. nor the names of its contributors may be
-# used to endorse or promote products derived from this software without
-# specific prior written permission.
-#
-# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
-# ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
-# LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
-# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
-# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
-# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
-# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
-# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
-# POSSIBILITY OF SUCH DAMAGE.
-#
-# Author: alexs.mac@gmail.com (Alex Stewart)
-#
-
-# FindEigen.cmake - Find Eigen library, version >= 3.
-#
-# This module defines the following variables:
-#
-# EIGEN_FOUND: TRUE iff Eigen is found.
-# EIGEN_INCLUDE_DIRS: Include directories for Eigen.
-# EIGEN_VERSION: Extracted from Eigen/src/Core/util/Macros.h
-# EIGEN_WORLD_VERSION: Equal to 3 if EIGEN_VERSION = 3.2.0
-# EIGEN_MAJOR_VERSION: Equal to 2 if EIGEN_VERSION = 3.2.0
-# EIGEN_MINOR_VERSION: Equal to 0 if EIGEN_VERSION = 3.2.0
-# FOUND_INSTALLED_EIGEN_CMAKE_CONFIGURATION: True iff the version of Eigen
-# found was built & installed /
-# exported as a CMake package.
-#
-# The following variables control the behaviour of this module:
-#
-# EIGEN_PREFER_EXPORTED_EIGEN_CMAKE_CONFIGURATION: TRUE/FALSE, iff TRUE then
-# then prefer using an exported CMake configuration
-# generated by Eigen over searching for the
-# Eigen components manually. Otherwise (FALSE)
-# ignore any exported Eigen CMake configurations and
-# always perform a manual search for the components.
-# Default: TRUE iff user does not define this variable
-# before we are called, and does NOT specify
-# EIGEN_INCLUDE_DIR_HINTS, otherwise FALSE.
-# EIGEN_INCLUDE_DIR_HINTS: List of additional directories in which to
-# search for eigen includes, e.g: /timbuktu/eigen3.
-#
-# The following variables are also defined by this module, but in line with
-# CMake recommended FindPackage() module style should NOT be referenced directly
-# by callers (use the plural variables detailed above instead). These variables
-# do however affect the behaviour of the module via FIND_[PATH/LIBRARY]() which
-# are NOT re-called (i.e. search for library is not repeated) if these variables
-# are set with valid values _in the CMake cache_. This means that if these
-# variables are set directly in the cache, either by the user in the CMake GUI,
-# or by the user passing -DVAR=VALUE directives to CMake when called (which
-# explicitly defines a cache variable), then they will be used verbatim,
-# bypassing the HINTS variables and other hard-coded search locations.
-#
-# EIGEN_INCLUDE_DIR: Include directory for CXSparse, not including the
-# include directory of any dependencies.
-
-# Called if we failed to find Eigen or any of it's required dependencies,
-# unsets all public (designed to be used externally) variables and reports
-# error message at priority depending upon [REQUIRED/QUIET/<NONE>] argument.
-macro(EIGEN_REPORT_NOT_FOUND REASON_MSG)
- unset(EIGEN_FOUND)
- unset(EIGEN_INCLUDE_DIRS)
- unset(FOUND_INSTALLED_EIGEN_CMAKE_CONFIGURATION)
- # Make results of search visible in the CMake GUI if Eigen has not
- # been found so that user does not have to toggle to advanced view.
- mark_as_advanced(CLEAR EIGEN_INCLUDE_DIR)
- # Note <package>_FIND_[REQUIRED/QUIETLY] variables defined by FindPackage()
- # use the camelcase library name, not uppercase.
- if (Eigen_FIND_QUIETLY)
- message(STATUS "Failed to find Eigen - " ${REASON_MSG} ${ARGN})
- elseif (Eigen_FIND_REQUIRED)
- message(FATAL_ERROR "Failed to find Eigen - " ${REASON_MSG} ${ARGN})
- else()
- # Neither QUIETLY nor REQUIRED, use no priority which emits a message
- # but continues configuration and allows generation.
- message("-- Failed to find Eigen - " ${REASON_MSG} ${ARGN})
- endif ()
- return()
-endmacro(EIGEN_REPORT_NOT_FOUND)
-
-# Protect against any alternative find_package scripts for this library having
-# been called previously (in a client project) which set EIGEN_FOUND, but not
-# the other variables we require / set here which could cause the search logic
-# here to fail.
-unset(EIGEN_FOUND)
-
-# -----------------------------------------------------------------
-# By default, if the user has expressed no preference for using an exported
-# Eigen CMake configuration over performing a search for the installed
-# components, and has not specified any hints for the search locations, then
-# prefer an exported configuration if available.
-if (NOT DEFINED EIGEN_PREFER_EXPORTED_EIGEN_CMAKE_CONFIGURATION
- AND NOT EIGEN_INCLUDE_DIR_HINTS)
- message(STATUS "No preference for use of exported Eigen CMake configuration "
- "set, and no hints for include directory provided. "
- "Defaulting to preferring an installed/exported Eigen CMake configuration "
- "if available.")
- set(EIGEN_PREFER_EXPORTED_EIGEN_CMAKE_CONFIGURATION TRUE)
-endif()
-
-# On macOS, add the Homebrew prefix (with appropriate suffixes) to the
-# respective HINTS directories (after any user-specified locations). This
-# handles Homebrew installations into non-standard locations (not /usr/local).
-# We do not use CMAKE_PREFIX_PATH for this as given the search ordering of
-# find_xxx(), doing so would override any user-specified HINTS locations with
-# the Homebrew version if it exists.
-if (CMAKE_SYSTEM_NAME MATCHES "Darwin")
- find_program(HOMEBREW_EXECUTABLE brew)
- mark_as_advanced(FORCE HOMEBREW_EXECUTABLE)
- if (HOMEBREW_EXECUTABLE)
- # Detected a Homebrew install, query for its install prefix.
- execute_process(COMMAND ${HOMEBREW_EXECUTABLE} --prefix
- OUTPUT_VARIABLE HOMEBREW_INSTALL_PREFIX
- OUTPUT_STRIP_TRAILING_WHITESPACE)
- message(STATUS "Detected Homebrew with install prefix: "
- "${HOMEBREW_INSTALL_PREFIX}, adding to CMake search paths.")
- list(APPEND EIGEN_INCLUDE_DIR_HINTS "${HOMEBREW_INSTALL_PREFIX}/include")
- endif()
-endif()
-
-if (EIGEN_PREFER_EXPORTED_EIGEN_CMAKE_CONFIGURATION)
- # Try to find an exported CMake configuration for Eigen.
- #
- # We search twice, s/t we can invert the ordering of precedence used by
- # find_package() for exported package build directories, and installed
- # packages (found via CMAKE_SYSTEM_PREFIX_PATH), listed as items 6) and 7)
- # respectively in [1].
- #
- # By default, exported build directories are (in theory) detected first, and
- # this is usually the case on Windows. However, on OS X & Linux, the install
- # path (/usr/local) is typically present in the PATH environment variable
- # which is checked in item 4) in [1] (i.e. before both of the above, unless
- # NO_SYSTEM_ENVIRONMENT_PATH is passed). As such on those OSs installed
- # packages are usually detected in preference to exported package build
- # directories.
- #
- # To ensure a more consistent response across all OSs, and as users usually
- # want to prefer an installed version of a package over a locally built one
- # where both exist (esp. as the exported build directory might be removed
- # after installation), we first search with NO_CMAKE_PACKAGE_REGISTRY which
- # means any build directories exported by the user are ignored, and thus
- # installed directories are preferred. If this fails to find the package
- # we then research again, but without NO_CMAKE_PACKAGE_REGISTRY, so any
- # exported build directories will now be detected.
- #
- # To prevent confusion on Windows, we also pass NO_CMAKE_BUILDS_PATH (which
- # is item 5) in [1]), to not preferentially use projects that were built
- # recently with the CMake GUI to ensure that we always prefer an installed
- # version if available.
- #
- # [1] http://www.cmake.org/cmake/help/v2.8.11/cmake.html#command:find_package
- find_package(Eigen3 QUIET
- HINTS ${Eigen3_DIR} ${HOMEBREW_INSTALL_PREFIX}
- NO_MODULE
- NO_CMAKE_PACKAGE_REGISTRY
- NO_CMAKE_BUILDS_PATH)
- if (EIGEN3_FOUND)
- message(STATUS "Found installed version of Eigen: ${Eigen3_DIR}")
- else()
- # Failed to find an installed version of Eigen, repeat search allowing
- # exported build directories.
- message(STATUS "Failed to find installed Eigen CMake configuration, "
- "searching for Eigen build directories exported with CMake.")
- # Again pass NO_CMAKE_BUILDS_PATH, as we know that Eigen is exported and
- # do not want to treat projects built with the CMake GUI preferentially.
- find_package(Eigen3 QUIET
- NO_MODULE
- NO_CMAKE_BUILDS_PATH)
- if (EIGEN3_FOUND)
- message(STATUS "Found exported Eigen build directory: ${Eigen3_DIR}")
- endif()
- endif()
- if (EIGEN3_FOUND)
- set(FOUND_INSTALLED_EIGEN_CMAKE_CONFIGURATION TRUE)
- set(EIGEN_FOUND ${EIGEN3_FOUND})
- set(EIGEN_INCLUDE_DIR "${EIGEN3_INCLUDE_DIR}" CACHE STRING
- "Eigen include directory" FORCE)
- else()
- message(STATUS "Failed to find an installed/exported CMake configuration "
- "for Eigen, will perform search for installed Eigen components.")
- endif()
-endif()
-
-if (NOT EIGEN_FOUND)
- # Search user-installed locations first, so that we prefer user installs
- # to system installs where both exist.
- list(APPEND EIGEN_CHECK_INCLUDE_DIRS
- /usr/local/include
- /usr/local/homebrew/include # Mac OS X
- /opt/local/var/macports/software # Mac OS X.
- /opt/local/include
- /usr/include)
- # Additional suffixes to try appending to each search path.
- list(APPEND EIGEN_CHECK_PATH_SUFFIXES
- eigen3 # Default root directory for Eigen.
- Eigen/include/eigen3 # Windows (for C:/Program Files prefix) < 3.3
- Eigen3/include/eigen3 ) # Windows (for C:/Program Files prefix) >= 3.3
-
- # Search supplied hint directories first if supplied.
- find_path(EIGEN_INCLUDE_DIR
- NAMES Eigen/Core
- HINTS ${EIGEN_INCLUDE_DIR_HINTS}
- PATHS ${EIGEN_CHECK_INCLUDE_DIRS}
- PATH_SUFFIXES ${EIGEN_CHECK_PATH_SUFFIXES})
-
- if (NOT EIGEN_INCLUDE_DIR OR
- NOT EXISTS ${EIGEN_INCLUDE_DIR})
- eigen_report_not_found(
- "Could not find eigen3 include directory, set EIGEN_INCLUDE_DIR to "
- "path to eigen3 include directory, e.g. /usr/local/include/eigen3.")
- endif (NOT EIGEN_INCLUDE_DIR OR
- NOT EXISTS ${EIGEN_INCLUDE_DIR})
-
- # Mark internally as found, then verify. EIGEN_REPORT_NOT_FOUND() unsets
- # if called.
- set(EIGEN_FOUND TRUE)
-endif()
-
-# Extract Eigen version from Eigen/src/Core/util/Macros.h
-if (EIGEN_INCLUDE_DIR)
- set(EIGEN_VERSION_FILE ${EIGEN_INCLUDE_DIR}/Eigen/src/Core/util/Macros.h)
- if (NOT EXISTS ${EIGEN_VERSION_FILE})
- eigen_report_not_found(
- "Could not find file: ${EIGEN_VERSION_FILE} "
- "containing version information in Eigen install located at: "
- "${EIGEN_INCLUDE_DIR}.")
- else (NOT EXISTS ${EIGEN_VERSION_FILE})
- file(READ ${EIGEN_VERSION_FILE} EIGEN_VERSION_FILE_CONTENTS)
-
- string(REGEX MATCH "#define EIGEN_WORLD_VERSION [0-9]+"
- EIGEN_WORLD_VERSION "${EIGEN_VERSION_FILE_CONTENTS}")
- string(REGEX REPLACE "#define EIGEN_WORLD_VERSION ([0-9]+)" "\\1"
- EIGEN_WORLD_VERSION "${EIGEN_WORLD_VERSION}")
-
- string(REGEX MATCH "#define EIGEN_MAJOR_VERSION [0-9]+"
- EIGEN_MAJOR_VERSION "${EIGEN_VERSION_FILE_CONTENTS}")
- string(REGEX REPLACE "#define EIGEN_MAJOR_VERSION ([0-9]+)" "\\1"
- EIGEN_MAJOR_VERSION "${EIGEN_MAJOR_VERSION}")
-
- string(REGEX MATCH "#define EIGEN_MINOR_VERSION [0-9]+"
- EIGEN_MINOR_VERSION "${EIGEN_VERSION_FILE_CONTENTS}")
- string(REGEX REPLACE "#define EIGEN_MINOR_VERSION ([0-9]+)" "\\1"
- EIGEN_MINOR_VERSION "${EIGEN_MINOR_VERSION}")
-
- # This is on a single line s/t CMake does not interpret it as a list of
- # elements and insert ';' separators which would result in 3.;2.;0 nonsense.
- set(EIGEN_VERSION "${EIGEN_WORLD_VERSION}.${EIGEN_MAJOR_VERSION}.${EIGEN_MINOR_VERSION}")
- endif (NOT EXISTS ${EIGEN_VERSION_FILE})
-endif (EIGEN_INCLUDE_DIR)
-
-# Set standard CMake FindPackage variables if found.
-if (EIGEN_FOUND)
- set(EIGEN_INCLUDE_DIRS ${EIGEN_INCLUDE_DIR})
-endif (EIGEN_FOUND)
-
-# Handle REQUIRED / QUIET optional arguments and version.
-include(FindPackageHandleStandardArgs)
-find_package_handle_standard_args(Eigen
- REQUIRED_VARS EIGEN_INCLUDE_DIRS
- VERSION_VAR EIGEN_VERSION)
-
-# Only mark internal variables as advanced if we found Eigen, otherwise
-# leave it visible in the standard GUI for the user to set manually.
-if (EIGEN_FOUND)
- mark_as_advanced(FORCE EIGEN_INCLUDE_DIR
- Eigen3_DIR) # Autogenerated by find_package(Eigen3)
-endif (EIGEN_FOUND)
diff --git a/internal/ceres/CMakeLists.txt b/internal/ceres/CMakeLists.txt
index af13f35..cc004ee 100644
--- a/internal/ceres/CMakeLists.txt
+++ b/internal/ceres/CMakeLists.txt
@@ -301,7 +301,7 @@
# warnings around the #include statments for Eigen headers across all GCC/Clang
# versions, we tell CMake to treat Eigen headers as system headers. This
# results in all compiler warnings from them being suppressed.
-target_include_directories(ceres SYSTEM PUBLIC ${EIGEN_INCLUDE_DIRS})
+target_link_libraries(ceres PUBLIC Eigen3::Eigen)
# Gather the list of public & private include locations for all enabled optional
# dependencies to be added to the Ceres target.