提问者:小点点

OpenMP 4.5 on Windows with Clang, CMake


我正在尝试在Windows上使用OpenMP 4.5,但MSVC似乎不支持OpenMP

我发现Clang支持OpenMP 4.5,但我无法让它在Windows上运行。

我安装了Visual Studio 2017,Clang 8.0.0和CMake 3.13。

要构建我的 CMake 项目,我调用:

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"

但它找不到 OpenMP :

-- Could NOT find OpenMP_C (missing: OpenMP_C_FLAGS OpenMP_C_LIB_NAMES)
-- Could NOT find OpenMP_CXX (missing: OpenMP_CXX_FLAGS OpenMP_CXX_LIB_NAMES)
-- Could NOT find OpenMP (missing: OpenMP_C_FOUND OpenMP_CXX_FOUND)

如果我单独使用 clang (clang.exe 构建

如果我单独使用 MSVC 构建,它会发现 OpenMP 2.0

但是使用 clang-cl.exe,它找不到 OpenMP(两个版本都没有)

有没有办法让OpenMP 4.5在Windows上运行?

谢谢


共1个答案

匿名用户

你还没有发布你的CMake的例子,所以我在这里不做猜想。如果您使用的是find_package(OpenMP REQUIRED),我在Visual Studio中使用clang-cl时也收到了类似的错误。CMake的FindOpenMP.cmake模块存在已知的局限性,并且缺乏对clang-cl端的支持。这个网站上还有其他答案建议手动填充 CMake OpenMP_变量,但这似乎是倒退的,我只取得了有限的成功。我能够成功运行CMake然后编译我的ap通过避免使用 find_package 和(不幸的是)现在硬编码 OpenMP 库的路径来使用 MSVC Clang 进行转换:

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