--- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -209,40 +209,40 @@ endif (IOS) unset(CERES_COMPILE_OPTIONS) # 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) +find_package(Eigen3 REQUIRED CONFIG) +if (1) + message("-- Found Eigen version ${Eigen3_VERSION}: ${Eigen3_INCLUDE_DIRS}") + if (Eigen3_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) + "${Eigen3_VERSION}") + endif () if (CMAKE_SYSTEM_PROCESSOR MATCHES "^(aarch64.*|AARCH64.*)" AND - EIGEN_VERSION VERSION_LESS 3.3.4) + Eigen3_VERSION 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}.") 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) + if (Eigen3_VERSION VERSION_LESS 3.2.2) message(" WARNING:") message("") - message(" Your version of Eigen (${EIGEN_VERSION}) is older than ") + message(" Your version of Eigen (${Eigen3_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) + endif () 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 () if (LAPACK) find_package(LAPACK QUIET) @@ -376,13 +376,14 @@ else (MINIGLOG) unset(MINIGLOG_MAX_LOG_LEVEL CACHE) # Don't search with REQUIRED so that configuration continues if not found and # we can output an error messages explaining MINIGLOG option. - find_package(Glog) - if (NOT GLOG_FOUND) + find_package(glog REQUIRED CONFIG) + if (0) message(FATAL_ERROR "Can't find Google Log (glog). Please set either: " "glog_DIR (newer CMake built versions of glog) or GLOG_INCLUDE_DIR & " "GLOG_LIBRARY or enable MINIGLOG option to use minimal glog " "implementation.") - endif(NOT GLOG_FOUND) + endif() + if(0) # By default, assume gflags was found, updating the message if it was not. set(GLOG_GFLAGS_DEPENDENCY_MESSAGE " Assuming glog was built with gflags support as gflags was found. " @@ -395,7 +396,8 @@ else (MINIGLOG) "Otherwise, Ceres may fail to link due to missing gflags symbols.") endif(NOT GFLAGS_FOUND) message("-- Found Google Log (glog)." ${GLOG_GFLAGS_DEPENDENCY_MESSAGE}) -endif (MINIGLOG) + endif() +endif () if (NOT SCHUR_SPECIALIZATIONS) list(APPEND CERES_COMPILE_OPTIONS CERES_RESTRICT_SCHUR_SPECIALIZATION) @@ -526,7 +528,7 @@ if (CXX11 AND (TBB OR CXX11_THREADS)) endif() if (CXX11 AND TBB) - find_package(TBB QUIET) + find_package(TBB REQUIRED CONFIG) if (TBB_FOUND) message("-- Building with TBB (version: ${TBB_VERSION}).") list(APPEND CERES_COMPILE_OPTIONS CERES_USE_TBB) --- a/internal/ceres/CMakeLists.txt +++ b/internal/ceres/CMakeLists.txt @@ -152,9 +152,10 @@ else (SCHUR_SPECIALIZATIONS) endif (SCHUR_SPECIALIZATIONS) # Build the list of dependencies for Ceres based on the current configuration. -if (NOT MINIGLOG AND GLOG_FOUND) - list(APPEND CERES_LIBRARY_PUBLIC_DEPENDENCIES ${GLOG_LIBRARIES}) - if (GFLAGS_FOUND) +list(APPEND CERES_LIBRARY_PUBLIC_DEPENDENCIES Eigen3::Eigen) +if (NOT MINIGLOG) + list(APPEND CERES_LIBRARY_PUBLIC_DEPENDENCIES glog::glog) + if (0) # If glog & gflags are both found, we assume that glog was built with # gflags, as it is awkward to perform a try_compile() to verify this # when gflags is an imported target (as it is in newer versions). @@ -162,7 +163,7 @@ if (NOT MINIGLOG AND GLOG_FOUND) # gflags, it is thus a public dependency for Ceres in this case. list(APPEND CERES_LIBRARY_PUBLIC_DEPENDENCIES ${GFLAGS_LIBRARIES}) endif() -endif (NOT MINIGLOG AND GLOG_FOUND) +endif () if (SUITESPARSE AND SUITESPARSE_FOUND) # Define version information for use in Solver::FullReport. @@ -191,7 +192,7 @@ if (OPENMP_FOUND) endif (OPENMP_FOUND) if (TBB_FOUND) - list(APPEND CERES_LIBRARY_PRIVATE_DEPENDENCIES ${TBB_LIBRARIES}) + list(APPEND CERES_LIBRARY_PRIVATE_DEPENDENCIES TBB::tbb) if (NOT MSVC) list(APPEND CERES_LIBRARY_PRIVATE_DEPENDENCIES ${CMAKE_THREAD_LIBS_INIT}) endif (NOT MSVC) @@ -241,8 +242,8 @@ if (BUILD_SHARED_LIBS) # When building a shared library, mark all external libraries as # PRIVATE so they don't show up as a dependency. target_link_libraries(ceres - LINK_PUBLIC ${CERES_LIBRARY_PUBLIC_DEPENDENCIES} - LINK_PRIVATE ${CERES_LIBRARY_PRIVATE_DEPENDENCIES}) + PUBLIC ${CERES_LIBRARY_PUBLIC_DEPENDENCIES} + PRIVATE ${CERES_LIBRARY_PRIVATE_DEPENDENCIES}) else (BUILD_SHARED_LIBS) # When building a static library, all external libraries are # PUBLIC(default) since the user needs to link to them. @@ -250,7 +251,9 @@ else (BUILD_SHARED_LIBS) set(CERES_LIBRARY_DEPENDENCIES ${CERES_LIBRARY_PUBLIC_DEPENDENCIES} ${CERES_LIBRARY_PRIVATE_DEPENDENCIES}) - target_link_libraries(ceres ${CERES_LIBRARY_DEPENDENCIES}) + target_link_libraries(ceres + PUBLIC ${CERES_LIBRARY_PUBLIC_DEPENDENCIES} + PRIVATE ${CERES_LIBRARY_PRIVATE_DEPENDENCIES}) endif (BUILD_SHARED_LIBS) install(TARGETS ceres