CMake cannot find OpenMP
Solution 1
OpenMp
is not a package, if it's supported, it comes as a part of the your compiler. Try setting CMAKE_C_FLAGS
or CMAKE_CXX_FLAGS
accordingly. e.g:
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fopenmp")
activates OpenMP
for compiling C
sources when gcc
is used. For other compilers, you should first detect the compiler and then add appropriate flags
Solution 2
CMake has a FindOpenMP module even in 2.x versions. See http://www.cmake.org/cmake/help/v3.0/module/FindOpenMP.html
So I'll do this:
OPTION (USE_OpenMP "Use OpenMP" ON)
IF(USE_OpenMP)
FIND_PACKAGE(OpenMP)
IF(OPENMP_FOUND)
SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${OpenMP_C_FLAGS}")
SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${OpenMP_CXX_FLAGS}")
ENDIF()
ENDIF()
Solution 3
According to the Modern CMake online book, this is how you configure OpenMP support with CMake:
find_package(OpenMP)
if(OpenMP_CXX_FOUND)
target_link_libraries(MyTarget PUBLIC OpenMP::OpenMP_CXX)
endif()
What you definitely should not do is to add flags like -fopenmp
manually (like the accepted answer recommends) because that may not be portable.
Related videos on Youtube
Comments
-
ehuang over 1 year
I am trying to compile with OpenMP. My
CMakeLists.txt
contains the linefind_package(OpenMP REQUIRED)
and CMake errors out with
CMake Error at /opt/ros/groovy/share/catkin/cmake/catkinConfig.cmake:72 (find_package): Could not find a configuration file for package openmp. Set openmp_DIR to the directory containing a CMake configuration file for openmp. The file will have one of the following names: openmpConfig.cmake openmp-config.cmake
Checking my filesystem, I see that I have
/usr/share/cmake-2.8/Modules/FindOpenMP.cmake
but noopenmpConfig.cmake
oropenmp-config.cmake
. What do I need to do to fix this? -
JonnyRo over 9 yearsstackoverflow.com/questions/3134660/… had an interesting solution in which CMake checks if the flag is supported using a macro. Sort of the logical expansion of your solution.
-
iNFINITEi over 7 yearsThere is FindOpenMP cmake module. See cmake.org/cmake/help/v3.0/module/FindOpenMP.html
-
Pubudu about 6 yearsThank you very much for this! Exactly what I needed :D
-
David Doria almost 6 years@GradGuy I am using CMake 3.7 and clang 4.0 but my
find_package(OpenMP REQUIRED)
fails to find OpenMP. -
mmirzadeh almost 6 years@DavidDoria Clang used to have problems with OpenMP, specially on OSX, but it looks like the new version should work fine. Can you build a simple OpenMP test with your version of clang?
-
David Doria almost 6 years@GradGuy You mean with Clang I don't even have to
find_package(OpenMP)
? -
Alex Reinking over 1 yearThis is the ONLY correct answer on this page.
-
ChrisZZ 9 monthsThe pastes cmake lines is cool, brief, portable. However, it failed on my qnx-aarch64 compiler, it just don't know where the openmp shared or static library locates, but I know where they are. What's worse, I can't tell CMake to find them! What a joke.