CMake无法找到OpenMP

ehu*_*ang 14 cmake openmp

我正在尝试使用OpenMP进行编译.我CMakeLists.txt包含这条线

find_package(OpenMP REQUIRED)

和CMake错误

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
Run Code Online (Sandbox Code Playgroud)

检查我的文件系统,我看到我有/usr/share/cmake-2.8/Modules/FindOpenMP.cmake但没有openmpConfig.cmakeopenmp-config.cmake.我需要做些什么来解决这个问题?

iNF*_*TEi 28

即使在2.x版本中,CMake也有一个FindOpenMP模块.见http://www.cmake.org/cmake/help/v3.0/module/FindOpenMP.html

所以我会这样做:

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()
Run Code Online (Sandbox Code Playgroud)


Lar*_*dua 13

根据Modern CMake在线书籍,这是使用 CMake 配置 OpenMP 支持的方式:

find_package(OpenMP)
if(OpenMP_CXX_FOUND)
    target_link_libraries(MyTarget PUBLIC OpenMP::OpenMP_CXX)
endif()
Run Code Online (Sandbox Code Playgroud)

绝对不应该做的是手动添加标志-fopenmp(如接受的答案建议),因为这可能不可移植。

  • 这是本页上唯一正确的答案。 (3认同)

Gra*_*Guy 7

OpenMp不是一个包,如果它是支持的,它作为你的编译器的一部分.尝试设置CMAKE_C_FLAGSCMAKE_CXX_FLAGS相应.例如:

set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fopenmp")在使用时激活OpenMP用于编译Cgcc.对于其他编译器,您应首先检测编译器,然后添加适当的标志

  • http://stackoverflow.com/questions/3134660/how-to-apply-different-compiler-options-for-different-compilers-in-cmake有一个有趣的解决方案,其中CMake使用宏检查是否支持该标志.排序解决方案的逻辑扩展. (2认同)
  • 有FindOpenMP cmake模块.见http://www.cmake.org/cmake/help/v3.0/module/FindOpenMP.html (2认同)