Replace use of GFLAGS_LIBRARIES with export gflags target
- As our minimum required version of gflags (2.2) exports itself as
a CMake package and this is the case for the default 18.04 package
we can use the gflags target directly.
- Replaces forced use of CONFIG in find_package(gflags) with a check
that the gflags imported target exists to avoid ambiguity with
libgflags if installed in a default location. This permits users to
override the gflags detection should they so choose, provided that
they do so via an imported target.
- Also removes some previously removed legacy GLAGS_ vars from the
installation docs.
Change-Id: I015f5a751e5b22f956bbf9df692e63a6825c9f0d
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 948bddb..7354c43 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -391,25 +391,24 @@
# GFlags.
if (GFLAGS)
# Don't search with REQUIRED as we can continue without gflags.
- find_package(gflags 2.2.0 CONFIG
- HINTS "${HOMEBREW_INCLUDE_DIR_HINTS}")
+ find_package(gflags 2.2.0 HINTS "${HOMEBREW_INCLUDE_DIR_HINTS}")
if (gflags_FOUND)
- message("-- Found Google Flags version ${gflags_VERSION}: ${GFLAGS_INCLUDE_DIR}")
+ if (TARGET gflags)
+ message("-- Found Google Flags (gflags) version ${gflags_VERSION}: ${gflags_DIR}")
+ else()
+ message("-- Detected version of gflags: ${gflags_VERSION} does not define "
+ "expected gflags CMake target which should be exported by gflags 2.2+. "
+ "Building without gflags.")
+ update_cache_variable(GFLAGS OFF)
+ endif()
else (gflags_FOUND)
- message("-- Did not find Google Flags (gflags), Building without gflags "
- "- no tests or tools will be built!")
+ message("-- Did not find Google Flags (gflags), Building without gflags.")
update_cache_variable(GFLAGS OFF)
endif (gflags_FOUND)
-else (GFLAGS)
- message("-- Google Flags disabled; no tests or tools will be built!")
- # Mark as advanced (remove from default GUI view) the gflags search
- # variables in case user enabled GFLAGS, FindGflags did not find it, so
- # made search variables visible in GUI for user to set, but then user disables
- # GFLAGS instead of setting them.
- mark_as_advanced(FORCE GFLAGS_INCLUDE_DIR
- GFLAGS_LIBRARY
- GFLAGS_NAMESPACE)
-endif (GFLAGS)
+endif()
+if (NOT GFLAGS)
+ message("-- Use of gflags disabled - no tests or tools will be built!")
+endif()
# MiniGLog.
if (MINIGLOG)
diff --git a/cmake/CeresConfig.cmake.in b/cmake/CeresConfig.cmake.in
index 81c0511..ae94833 100644
--- a/cmake/CeresConfig.cmake.in
+++ b/cmake/CeresConfig.cmake.in
@@ -253,12 +253,12 @@
# if Ceres was built with MINIGLOG.
if (CERES_USES_GFLAGS)
# Search quietly s/t we control the timing of the error message if not found.
- find_package(gflags ${CERES_GFLAGS_VERSION} CONFIG QUIET)
- if (gflags_FOUND)
+ find_package(gflags ${CERES_GFLAGS_VERSION} QUIET)
+ if (gflags_FOUND AND TARGET gflags)
ceres_message(STATUS "Found required Ceres dependency: gflags")
else()
ceres_report_not_found("Missing required Ceres "
- "dependency: gflags.")
+ "dependency: gflags (not found, or not found as exported CMake target).")
endif()
endif()
endif(CERES_USES_MINIGLOG)
diff --git a/docs/source/installation.rst b/docs/source/installation.rst
index 2d844cb..db12cce 100644
--- a/docs/source/installation.rst
+++ b/docs/source/installation.rst
@@ -447,8 +447,6 @@
#. ``EIGEN_INCLUDE_DIR_HINTS``
#. ``GLOG_INCLUDE_DIR_HINTS``
#. ``GLOG_LIBRARY_DIR_HINTS``
- #. ``GFLAGS_INCLUDE_DIR_HINTS``
- #. ``GFLAGS_LIBRARY_DIR_HINTS``
#. (Optional) ``SUITESPARSE_INCLUDE_DIR_HINTS``
#. (Optional) ``SUITESPARSE_LIBRARY_DIR_HINTS``
#. (Optional) ``CXSPARSE_INCLUDE_DIR_HINTS``
diff --git a/examples/CMakeLists.txt b/examples/CMakeLists.txt
index 27e736a..7f9b117 100644
--- a/examples/CMakeLists.txt
+++ b/examples/CMakeLists.txt
@@ -72,41 +72,41 @@
if (GFLAGS)
add_executable(powell powell.cc)
- target_link_libraries(powell Ceres::ceres ${GFLAGS_LIBRARIES})
+ target_link_libraries(powell Ceres::ceres gflags)
add_executable(nist nist.cc)
- target_link_libraries(nist Ceres::ceres ${GFLAGS_LIBRARIES})
+ target_link_libraries(nist Ceres::ceres gflags)
if (MSVC)
target_compile_options(nist PRIVATE "/bigobj")
endif()
add_executable(more_garbow_hillstrom more_garbow_hillstrom.cc)
- target_link_libraries(more_garbow_hillstrom Ceres::ceres ${GFLAGS_LIBRARIES})
+ target_link_libraries(more_garbow_hillstrom Ceres::ceres gflags)
add_executable(circle_fit circle_fit.cc)
- target_link_libraries(circle_fit Ceres::ceres ${GFLAGS_LIBRARIES})
+ target_link_libraries(circle_fit Ceres::ceres gflags)
add_executable(bundle_adjuster
bundle_adjuster.cc
bal_problem.cc)
- target_link_libraries(bundle_adjuster Ceres::ceres ${GFLAGS_LIBRARIES})
+ target_link_libraries(bundle_adjuster Ceres::ceres gflags)
add_executable(libmv_bundle_adjuster
libmv_bundle_adjuster.cc)
- target_link_libraries(libmv_bundle_adjuster Ceres::ceres ${GFLAGS_LIBRARIES})
+ target_link_libraries(libmv_bundle_adjuster Ceres::ceres gflags)
add_executable(libmv_homography
libmv_homography.cc)
- target_link_libraries(libmv_homography Ceres::ceres ${GFLAGS_LIBRARIES})
+ target_link_libraries(libmv_homography Ceres::ceres gflags)
add_executable(denoising
denoising.cc
fields_of_experts.cc)
- target_link_libraries(denoising Ceres::ceres ${GFLAGS_LIBRARIES})
+ target_link_libraries(denoising Ceres::ceres gflags)
add_executable(robot_pose_mle
robot_pose_mle.cc)
- target_link_libraries(robot_pose_mle Ceres::ceres ${GFLAGS_LIBRARIES})
+ target_link_libraries(robot_pose_mle Ceres::ceres gflags)
endif (GFLAGS)
diff --git a/examples/slam/pose_graph_2d/CMakeLists.txt b/examples/slam/pose_graph_2d/CMakeLists.txt
index 2b35c7f..20af056 100644
--- a/examples/slam/pose_graph_2d/CMakeLists.txt
+++ b/examples/slam/pose_graph_2d/CMakeLists.txt
@@ -35,5 +35,5 @@
pose_graph_2d.cc
pose_graph_2d_error_term.h
types.h)
- target_link_libraries(pose_graph_2d Ceres::ceres ${GFLAGS_LIBRARIES})
+ target_link_libraries(pose_graph_2d Ceres::ceres gflags)
endif (GFLAGS)
diff --git a/examples/slam/pose_graph_3d/CMakeLists.txt b/examples/slam/pose_graph_3d/CMakeLists.txt
index b75e2ce..b6421cc 100644
--- a/examples/slam/pose_graph_3d/CMakeLists.txt
+++ b/examples/slam/pose_graph_3d/CMakeLists.txt
@@ -30,5 +30,5 @@
if (GFLAGS)
add_executable(pose_graph_3d pose_graph_3d.cc)
- target_link_libraries(pose_graph_3d Ceres::ceres ${GFLAGS_LIBRARIES})
+ target_link_libraries(pose_graph_3d Ceres::ceres gflags)
endif (GFLAGS)