Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/cmake/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
CMake找不到OpenMP_Cmake_Openmp - Fatal编程技术网

CMake找不到OpenMP

CMake找不到OpenMP,cmake,openmp,Cmake,Openmp,我正在尝试用OpenMP编译。MyCMakeLists.txt包含行 find_程序包(需要OpenMP) 然后,我会用 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 containi

我正在尝试用OpenMP编译。My
CMakeLists.txt
包含行

find_程序包(需要OpenMP)

然后,我会用

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
。我需要做些什么来修复这个问题?

OpenMp不是一个包,若它受支持,它将作为编译器的一部分提供。尝试相应地设置
CMAKE\u C\u标志
CMAKE\u CXX\u标志
。e、 g:


set(CMAKE\u C\u FLAGS“${CMAKE\u C\u FLAGS}-fopenmp”)
在使用
gcc
时激活
OpenMP
以编译
C
源代码。对于其他编译器,您应该首先检测编译器,然后添加适当的标志,即使在2.x版本中,CMake也有一个FindOpenMP模块。看

所以我要这样做:

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()

英菲尼迪的回答对我不起作用。 我使用Ubuntu,试图用
OpenCV
静态库编译一些代码。链接之后,我得到了这个:

“/usr/bin/ld:/usr/local/lib/libopencv\u core.a(parallel.cpp.o):对符号“omp\u set\u dynamic@@omp\u 1.0”的未定义引用”

所以我尝试了英菲尼迪的方法,然后我:

'位于/usr/local/share/CMake-3.13/Modules/findpackagehandlestandardardargs的CMake错误。CMake:211(消息): 没有为FIND\u PACKAGE\u HANDLE\u STANDARD\u ARGS()指定所需的变量 调用堆栈(最新调用优先): /usr/local/share/cmake-3.13/Modules/FindOpenMP.cmake:513(查找包、句柄、标准参数) CMakeLists.txt:8(查找包)'


最后,我将
“-fopenmp=libomp”
添加到
CMAKE\u CXX\u标志中,解决了我的问题。

您应该使用brew安装libomp

我使用macOS,它对我来说运行得很顺利。

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

find_package(OpenMP)
if(OpenMP_CXX_FOUND)
    target_link_libraries(MyTarget PUBLIC OpenMP::OpenMP_CXX)
endif()

您绝对不应该手动添加标记,如
-fopenmp
(如接受的答案所建议的那样),因为这可能不可移植。

有一个有趣的解决方案,CMake使用宏检查是否支持该标记。解决方案的逻辑扩展。有FindOpenMP cmake模块。请参阅@GradGuy我正在使用CMake 3.7和clang 4.0,但我的
find_软件包(需要OpenMP)
找不到OpenMP。@DavidDoria clang以前在OpenMP方面有问题,特别是在OSX上,但新版本看起来应该可以正常工作。你能用你的clang版本建立一个简单的OpenMP测试吗?@GradGuy你是说用clang我甚至不必
查找OpenMP包(OpenMP)
?非常感谢!正是我所需要的:这是本页上唯一正确的答案。