CMake找不到OpenMP
我正在尝试用OpenMP编译。MyCMake找不到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
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)
?非常感谢!正是我所需要的:这是本页上唯一正确的答案。