我尝试让 clang 5.0.0 适用于 Visual Studio 2015,因为我需要 OpenMP 3.0 功能。我安装了clang编译器(不是没有任何openmp支持的vs2015版本)并使用cmake:
cmake_minimum_required(VERSION 2.8.10)
project(myproject)
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()
include_directories("include")
add_library(libFoo STATIC Foo.cpp)
install(TARGETS Foo libFoo LIBRARY DESTINATION lib ARCHIVE DESTINATION lib)
当我现在尝试配置MSVC 14 2015 Win64
使用或不使用工具链构建LLVM-vs2014
我总是收到错误,未找到 OpenMP:
The C compiler identification is Clang 5.0.0
The CXX compiler identification is Clang 5.0.0
Check for working C compiler: D:/Program Files/LLVM/msbuild-bin/cl.exe
Check for working C compiler: D:/Program Files/LLVM/msbuild-bin/cl.exe -- works
Detecting C compiler ABI info
Detecting C compiler ABI info - done
Detecting C compile features
Detecting C compile features - done
Check for working CXX compiler: D:/Program Files/LLVM/msbuild-bin/cl.exe
Check for working CXX compiler: D:/Program Files/LLVM/msbuild-bin/cl.exe -- works
Detecting CXX compiler ABI info
Detecting CXX compiler ABI info - done
Detecting CXX compile features
Detecting CXX compile features - done
Could NOT find OpenMP_C (missing: OpenMP_C_FLAGS OpenMP_C_LIB_NAMES) (found version "1.0")
Could NOT find OpenMP_CXX (missing: OpenMP_CXX_FLAGS OpenMP_CXX_LIB_NAMES) (found version "1.0")
Configuring done
使用的编译器似乎是正确的(安装了 clang,而不是 Microsoft 版本),它自动检测 clang-cl 二进制文件,但 OpenMP 失败。
我尝试使用“指定本机编译器”手动指定编译器并得到相同的结果。它甚至选择 clang-cl 版本而不是 clang++。
相关答案,但不能解决问题:
-
使用 clang-cl 使用 openmp 编译 C 代码- 最近的 clang 包含了 libomp.lib 和 libiomp5.dll
这确实有点棘手,而且 cmake 自动检测似乎工作得不太好。有帮助的是
OpenMP_CXX_FLAGS="-Xclang -fopenmp"
OpenMP_C_FLAGS="-Xclang -fopenmp"
并确保libomp.lib
位于链接库中。
-Xclang
告诉 clang 二进制文件,以下选项采用 clang 格式而不是 MSVC 格式,并且 -fopenmp 只是通常的 OpenMP 标志。但是,以任何其他方式设置它都不起作用。
一般模式是:-Xclang -clangFlag1 -Xclang -clangFlag2...
。即每个 Clang 风格标志都需要自己的-Xclang
.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)