我试图在Windows上使用OpenMP 4.5,但MSVC似乎不支持OpenMP> 2.0
我发现Clang支持OpenMP 4.5,但是我无法使其在Windows上运行。
我安装了Visual Studio 2017,Clang 8.0.0和CMake 3.13。
要构建我的CMake项目,请致电:
try:
raise ZeroDivisionError()
except ZeroDivisionError as e:
try:
raise TypeError() from e
except Exception as ex:
if type(ex.__cause__) is ZeroDivisionError:
print('ZeroDivisionError')
else:
raise # re-raise exception if it has different __cause__
但是找不到OpenMP:
cmake .. -G Ninja -DCMAKE_C_COMPILER="C:/Program Files/LLVM/bin/clang-cl.exe" -DCMAKE_CXX_COMPILER="C:/Program Files/LLVM/bin/clang-cl.exe" -DCMAKE_LINKER:PATH="C:/Program Files/LLVM/bin/lld-link.exe"
如果我仅使用 clang (clang.exe和clang ++。exe而不是clang-cl.exe)进行构建,它将找到Clang的OpenMP库(OpenMP 5.0)
如果我仅使用 MSVC 进行构建,它将找到OpenMP 2.0
但是使用 clang-cl.exe 时,找不到OpenMP(两个版本)
有没有一种方法可以使OpenMP 4.5在Windows上运行?
谢谢
答案 0 :(得分:0)
您尚未发布CMake的示例,因此在这里我不做任何推测。如果您使用的是find_package(OpenMP REQUIRED)
,那么从Visual Studio中使用clang-cl
时,我也会收到类似的错误消息。已知limitations带有CMake的FindOpenMP.cmake
模块,并且在clang-cl
方面缺乏支持。该站点上还有其他answers条建议手动填充CMake OpenMP_
变量,但这似乎是倒退的,我的成功有限。我能够成功运行CMake,然后通过避免使用find_package
并使用MSVC + Clang编译我的应用程序,并且暂时避免了对OpenMP库的路径进行硬编码:
cmake_minimum_required (VERSION 3.10)
project(MyOpenMPTest LANGUAGES CXX)
set(OpenMP_LIBRARY_DIR "C:/Program Files (x86)/Microsoft Visual Studio/2017/Community/VC/Tools/Llvm/lib")
set(OpenMP_CXX_FLAGS "-Xclang -fopenmp")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${OpenMP_CXX_FLAGS}")
# Tell CMake where to find the OpenMP libraries.
link_directories(${OpenMP_LIBRARY_DIR})
# Library
add_library(MyLibrary SHARED MyExample.h MyExample.cpp)
# Link in the OpenMP libraries.
target_link_libraries(MyLibrary PUBLIC libomp libiomp5md)
# Executable
add_executable(MyOpenMpTest MyOpenMpTest .cpp)
target_link_libraries(MyOpenMpTest MyLibrary)
希望CMake和LLVM的人们将很快解决此问题,并且FindOpenMP.cmake
可以更可靠地使用。