diff --git a/cmake/CeresConfig.cmake.in b/cmake/CeresConfig.cmake.in index 028eabb93..06f0fddc8 100644 --- a/cmake/CeresConfig.cmake.in +++ b/cmake/CeresConfig.cmake.in @@ -180,6 +180,7 @@ find_dependency(Threads) # Optional dependencies @SuiteSparse_DEPENDENCY@ +@OpenMP_DEPENDENCY@ # As imported CMake targets are not re-exported when a dependent target is # exported, we must invoke find_package(XXX) here to reload the definition diff --git a/internal/ceres/CMakeLists.txt b/internal/ceres/CMakeLists.txt index ace75db95..d6babfb0f 100644 --- a/internal/ceres/CMakeLists.txt +++ b/internal/ceres/CMakeLists.txt @@ -33,11 +33,14 @@ if (CERES_THREADING_MODEL STREQUAL "CXX_THREADS") set(CERES_PARALLEL_FOR_SRC parallel_for_cxx.cc thread_pool.cc) elseif (CERES_THREADING_MODEL STREQUAL "OPENMP") + # OpenMP requires linking to the corresponding library. + find_package(OpenMP REQUIRED COMPONENTS CXX) + set(CERES_PARALLEL_FOR_SRC parallel_for_openmp.cc) - if (CMAKE_COMPILER_IS_GNUCXX) - # OpenMP in GCC requires the GNU OpenMP library. - list(APPEND CERES_LIBRARY_PRIVATE_DEPENDENCIES gomp) - endif() + list(APPEND CERES_LIBRARY_PRIVATE_DEPENDENCIES OpenMP::OpenMP_CXX) + + # Make dependency visible to the parent CMakeLists.txt + set(OpenMP_DEPENDENCY "find_dependency (OpenMP ${OpenMP_CXX_VERSION} COMPONENTS CXX)" PARENT_SCOPE) elseif (CERES_THREADING_MODEL STREQUAL "NO_THREADS") set(CERES_PARALLEL_FOR_SRC parallel_for_nothreads.cc) endif()