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

Проверяя свою файловую систему, я вижу, что у меня есть /usr/share/cmake-2.8/Modules/FindOpenMP.cmake, но не openmpConfig.cmake или openmp-config.cmake. Что мне нужно сделать, чтобы исправить это?

Ответ 1

OpenMp не является пакетом, если он поддерживается, он входит в состав вашего компилятора. Попробуйте установить CMAKE_C_FLAGS или CMAKE_CXX_FLAGS соответственно. например:

set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fopenmp") активирует OpenMp для компиляции источников C при использовании gcc. Для других компиляторов вы должны сначала обнаружить компилятор, а затем добавить соответствующие флаги

Ответ 2

CMake имеет модуль FindOpenMP даже в версиях 2.x. См. 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()

Ответ 3

Ответ iFINITEi не работает для меня. Я использую Ubuntu, пытаясь скомпилировать код со статической библиотекой OpenCV. После ссылки я получил это:

'"/usr/bin/ld: /usr/local/lib/libopencv_core.a(parallel.cpp.o): undefined reference to symbol '[email protected]@OMP_1.0'"'

Поэтому я попробовал подход iNFINITEi, то у меня есть:

'Ошибка CMake в /usr/local/share/cmake-3.13/Modules/FindPackageHandleStandardArgs.cmake:211 (сообщение):   Не указано REQUIRED_VARS для FIND_PACKAGE_HANDLE_STANDARD_ARGS() Стек вызовов (самый последний вызов сначала):    /usr/local/share/cmake-3.13/Modules/FindOpenMP.cmake:513 (find_package_handle_standard_args)   CMakeLists.txt: 8 (FIND_PACKAGE) '

Наконец, я добавляю "-fopenmp=libomp" к CMAKE_CXX_FLAGS, решил мою проблему.