Fix TBB detection on Windows.
- Reported as issue #334 by anuppari:
https://github.com/ceres-solver/ceres-solver/issues/334.
Change-Id: Ie8af4b3ce7ef97e471deb780e2b7d683dcb0d658
diff --git a/CMakeLists.txt b/CMakeLists.txt
index f12d5ed..7df2219 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -111,23 +111,16 @@
# Enable the use of Eigen as a sparse linear algebra library for
# solving the nonlinear least squares problems.
option(EIGENSPARSE "Enable Eigen as a sparse linear algebra library." ON)
-if (NOT MSVC)
- # Ceres does not use C++11 internally, however it does use shared_ptr
- # (required) and unordered_map (if available), both of which were present in
- # previous iterations of what became C++11. GCC & Clang can have both TR1 &
- # C++11 versions of both shared_ptr & unordered_map and by default on Linux,
- # we will detect the TR1 versions if they exist, as they do NOT require
- # -std=c++11 to be passed when compiling Ceres, and any client code that uses
- # Ceres. This will result in conflicts if the client code uses C++11.
- # Enabling this option forces the use of the C++11 versions (& -std=c++11) if
- # available.
- #
- # This option is not available on Windows when using MSVC, as there, any new
- # (C++11 etc) features available are on by default and there is no analogue to
- # -std=c++11. It will however be available for MinGW & CygWin, which can
- # support -std=c++11.
- option(CXX11 "Enable use of C++11 headers if available (requires client code use C++11)." OFF)
-endif(NOT MSVC)
+# Ceres does not use C++11 internally, however it does use shared_ptr
+# (required) and unordered_map (if available), both of which were present in
+# previous iterations of what became C++11. GCC & Clang can have both TR1 &
+# C++11 versions of both shared_ptr & unordered_map and by default on Linux,
+# we will detect the TR1 versions if they exist, as they do NOT require
+# -std=c++11 to be passed when compiling Ceres, and any client code that uses
+# Ceres. This will result in conflicts if the client code uses C++11.
+# Enabling this option forces the use of the C++11 versions (& -std=c++11) if
+# available.
+option(CXX11 "Enable use of C++11 headers if available (requires client code use C++11)." OFF)
option(EXPORT_BUILD_DIR
"Export build directory using CMake (enables external use without install)." OFF)
option(BUILD_TESTING "Enable tests" ON)
@@ -136,6 +129,13 @@
cmake_dependent_option(BUILD_BENCHMARKS "Build Ceres benchmarking suite" ON "CXX11" OFF)
option(BUILD_SHARED_LIBS "Build Ceres as a shared library." OFF)
if (MSVC)
+ # CXX11 is always enabled on Windows when using MSVC, as there, any new
+ # (C++11 etc) features available are on by default and there is no analogue to
+ # -std=c++11. It is however optional for MinGW & CygWin, which can support
+ # -std=c++11.
+ update_cache_variable(CXX11 ON)
+ mark_as_advanced(FORCE CXX11)
+
option(MSVC_USE_STATIC_CRT
"MS Visual Studio: Use static C-Run Time Library in place of shared." OFF)
@@ -529,6 +529,7 @@
message("-- Failed to find Google benchmark library, disabling build of benchmarks.")
update_cache_variable(BUILD_BENCHMARKS OFF)
endif()
+ mark_as_advanced(benchmark_DIR)
endif()
include_directories(
diff --git a/cmake/FindTBB.cmake b/cmake/FindTBB.cmake
index 8d57c80..d3e2852 100644
--- a/cmake/FindTBB.cmake
+++ b/cmake/FindTBB.cmake
@@ -89,7 +89,7 @@
##################################
if(NOT DEFINED TBB_USE_DEBUG_BUILD)
- if(CMAKE_BUILD_TYPE MATCHES "[Debug|DEBUG|debug|RelWithDebInfo|RELWITHDEBINFO|relwithdebinfo]")
+ if(CMAKE_BUILD_TYPE MATCHES "(Debug|DEBUG|debug|RelWithDebInfo|RELWITHDEBINFO|relwithdebinfo)")
set(TBB_USE_DEBUG_BUILD TRUE)
else()
set(TBB_USE_DEBUG_BUILD FALSE)
@@ -175,12 +175,12 @@
find_library(TBB_${_comp}_LIBRARY_RELEASE ${_comp}
HINTS ${TBB_LIBRARY} ${TBB_SEARCH_DIR}
PATHS ${TBB_DEFAULT_SEARCH_DIR}
- PATH_SUFFIXES "${TBB_LIB_PATH_SUFFIX}")
+ PATH_SUFFIXES ${TBB_LIB_PATH_SUFFIX})
find_library(TBB_${_comp}_LIBRARY_DEBUG ${_comp}_debug
HINTS ${TBB_LIBRARY} ${TBB_SEARCH_DIR}
PATHS ${TBB_DEFAULT_SEARCH_DIR} ENV LIBRARY_PATH
- PATH_SUFFIXES "${TBB_LIB_PATH_SUFFIX}")
+ PATH_SUFFIXES ${TBB_LIB_PATH_SUFFIX})
# Set the library to be used for the component