Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/visual-studio/8.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
C++ 在VisualStudio中使用OpenMP与Clang和CMake_C++_Visual Studio_Cmake_Clang_Openmp - Fatal编程技术网

C++ 在VisualStudio中使用OpenMP与Clang和CMake

C++ 在VisualStudio中使用OpenMP与Clang和CMake,c++,visual-studio,cmake,clang,openmp,C++,Visual Studio,Cmake,Clang,Openmp,我正在尝试编译一个简单的应用程序来测试我将来可能使用的几个库。由于msvc的一些问题,我尝试了Clang,这导致了一个奇怪的错误,我消失了 我现在的问题是,我想要测试的库使用OpenMP。他们使用FindOpenMP模块CMake privides导入它。然而,模块没有找到它与叮当声 cmake_minimum_required(VERSION 3.14.0) project(blaze-test VERSION 0.1.0) set(CMAKE_CXX_STANDARD 14) set(CM

我正在尝试编译一个简单的应用程序来测试我将来可能使用的几个库。由于msvc的一些问题,我尝试了Clang,这导致了一个奇怪的错误,我消失了

我现在的问题是,我想要测试的库使用OpenMP。他们使用FindOpenMP模块CMake privides导入它。然而,模块没有找到它与叮当声

cmake_minimum_required(VERSION 3.14.0)
project(blaze-test VERSION 0.1.0)

set(CMAKE_CXX_STANDARD 14)
set(CMAKE_CXX_STANDARD_REQUIRED ON)

find_package(OpenMP)
我得到了这个输出:

1> CMake generation started for configuration: 'x64-Debug'.
1> Environment settings:
1>     CXXFLAGS=-m64 -fdiagnostics-absolute-paths
1>     CFLAGS=-m64 -fdiagnostics-absolute-paths
1> Command line: "cmd.exe" /c ""C:\PROGRAM FILES (X86)\MICROSOFT VISUAL STUDIO\2019\COMMUNITY\COMMON7\IDE\COMMONEXTENSIONS\MICROSOFT\CMAKE\CMake\bin\cmake.exe"  -G "Ninja" -DCMAKE_INSTALL_PREFIX:PATH="PATH\blaze-test\install\x64-Debug" -DCMAKE_CXX_COMPILER:FILEPATH="C:/PROGRAM FILES (X86)/MICROSOFT VISUAL STUDIO/2019/COMMUNITY/VC/Tools/Llvm/8.0.0/bin/clang-cl.exe" -DCMAKE_C_COMPILER:FILEPATH="C:/PROGRAM FILES (X86)/MICROSOFT VISUAL STUDIO/2019/COMMUNITY/VC/Tools/Llvm/8.0.0/bin/clang-cl.exe"  -DCMAKE_BUILD_TYPE="Debug" -DCMAKE_MAKE_PROGRAM="C:\PROGRAM FILES (X86)\MICROSOFT VISUAL STUDIO\2019\COMMUNITY\COMMON7\IDE\COMMONEXTENSIONS\MICROSOFT\CMAKE\Ninja\ninja.exe" "PATH\blaze-test" 2>&1"
1> Working directory: PATH\blaze-test\build\x64-Debug
1> [CMake] -- The C compiler identification is Clang 8.0.0
1> [CMake] -- The CXX compiler identification is Clang 8.0.0
1> [CMake] -- Check for working C compiler: C:/PROGRAM FILES (X86)/MICROSOFT VISUAL STUDIO/2019/COMMUNITY/VC/Tools/Llvm/8.0.0/bin/clang-cl.exe
1> [CMake] -- Check for working C compiler: C:/PROGRAM FILES (X86)/MICROSOFT VISUAL STUDIO/2019/COMMUNITY/VC/Tools/Llvm/8.0.0/bin/clang-cl.exe -- works
1> [CMake] -- Detecting C compiler ABI info
1> [CMake] -- Detecting C compiler ABI info - done
1> [CMake] -- Detecting C compile features
1> [CMake] -- Detecting C compile features - done
1> [CMake] -- Check for working CXX compiler: C:/PROGRAM FILES (X86)/MICROSOFT VISUAL STUDIO/2019/COMMUNITY/VC/Tools/Llvm/8.0.0/bin/clang-cl.exe
1> [CMake] -- Check for working CXX compiler: C:/PROGRAM FILES (X86)/MICROSOFT VISUAL STUDIO/2019/COMMUNITY/VC/Tools/Llvm/8.0.0/bin/clang-cl.exe -- works
1> [CMake] -- Detecting CXX compiler ABI info
1> [CMake] -- Detecting CXX compiler ABI info - done
1> [CMake] -- Detecting CXX compile features
1> [CMake] -- Detecting CXX compile features - done
1> [CMake] -- Could NOT find OpenMP_C (missing: OpenMP_C_FLAGS OpenMP_C_LIB_NAMES) 
1> [CMake] -- Could NOT find OpenMP_CXX (missing: OpenMP_CXX_FLAGS OpenMP_CXX_LIB_NAMES) 
1> [CMake] -- Could NOT find OpenMP (missing: OpenMP_C_FOUND OpenMP_CXX_FOUND)  
根据我补充的

就在find_包调用之前。它从错误消息中删除了有关编译器标志的部分。我以同样的方式添加了libomp.lib。然后我得到

1> [CMake] -- Could NOT find OpenMP_C (missing: OpenMP_C:/Program Files (x86)/Microsoft Visual Studio/2019/Community/VC/Tools/Llvm/8.0.0/lib/libomp.lib_LIBRARY) 
1> [CMake] -- Could NOT find OpenMP_CXX (missing: OpenMP_C:/Program Files (x86)/Microsoft Visual Studio/2019/Community/VC/Tools/Llvm/8.0.0/lib/libomp.lib_LIBRARY) 
1> [CMake] -- Could NOT find OpenMP (missing: OpenMP_C_FOUND OpenMP_CXX_FOUND)
我希望有人能告诉我如何让CMake找到它。这些不可靠的查找模块真的很烦人


ps:我正在CMake 3.14和Visual Studio 2019中使用Clang 8(Clang-cl.exe)。

在使用
find_包(需要OpenMP)
时,我在使用Visual Studio提供的
Clang cl
时也收到类似错误。CMake的
FindOpenMP.CMake
模块存在一些已知的缺陷,并且
clang cl
端缺乏一些支持。该站点上还有其他建议手动填充CMake
OpenMP\uz
变量,但这似乎是倒退。当我尝试它时,CMake声称找到了
OpenMP
,但是库的路径仍然未知,编译失败。通过避免使用
find_package
和(不幸的是)现在硬编码OpenMP库的路径,我成功地运行了CMake,然后用MSVC+Clang编译了我的应用程序:

cmake_minimum_required(VERSION 3.14.0)
project(blaze-test VERSION 0.1.0)

set(CMAKE_CXX_STANDARD 14)
set(CMAKE_CXX_STANDARD_REQUIRED ON)

set(OpenMP_LIBRARY_DIR "C:/Program Files (x86)/Microsoft Visual Studio/2019/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

你试过了吗?我试过了。添加编译器标志有效,但CMake抱怨缺少库。它说将libomp.lib添加到链接库中,但这并不能解决问题。它似乎不接受自由党。错误消息从“缺少:OpenMP_CXX_LIB_名称”更改为“缺少:OpenMP_C:/Program Files/LLVM/LIB/libomp.LIB_LIBRARY”。请在问题帖子中添加您的尝试说明。使用精确的命令行和精确的错误消息。你目前的描述太模糊,我们无法帮助你。
cmake_minimum_required(VERSION 3.14.0)
project(blaze-test VERSION 0.1.0)

set(CMAKE_CXX_STANDARD 14)
set(CMAKE_CXX_STANDARD_REQUIRED ON)

set(OpenMP_LIBRARY_DIR "C:/Program Files (x86)/Microsoft Visual Studio/2019/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)