使用 clang-12 时 CMake 的 find_package(OpenMP) 找不到 OpenMP

use*_*888 2 cmake openmp clang

我目前正在尝试使用cmake.

下面是我的 CMakeLists.txt:

cmake_minimum_required(VERSION 3.20)

set(CMAKE_C_STANDARD 11)

set(GCC_COMPILE_FLAGS -Wall -Werror -Wvla -O0)

SET(CMAKE_BUILD_TYPE Debug)

# Find 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}")
    set (CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} ${OpenMP_EXE_LINKER_FLAGS}")
endif()
Run Code Online (Sandbox Code Playgroud)

我使用的是 Ubuntu 20.04,安装libomp-dev如下:

libomp-dev is already the newest version (1:10.0-50~exp1).
Run Code Online (Sandbox Code Playgroud)

当我设置gcc为我的编译器时,cmake找到 OpenMP 没有问题。

但是,当我clang-12通过指定以下cmake标志用作编译器时:

-DCMAKE_C_COMPILER=/usr/bin/clang-12 -DCMAKE_CXX_COMPILER=/usr/bin/clang++-12
Run Code Online (Sandbox Code Playgroud)

我收到以下“找不到 OpenMP 错误” cmake

CMake Error at cmake/share/cmake-3.20/Modules/FindPackageHandleStandardArgs.cmake:230 (message):
  Could NOT find OpenMP_C
Run Code Online (Sandbox Code Playgroud)

我应该如何设置我的CMakeLists.txt文件,以便在用作clang我的编译器时可以找到 OpenMP?

use*_*888 6

正如 @Tsyvarev 指出的,由于我安装了libomp-dev版本10CMake如果我使用clang-10.

因此,为了让我能够将 OpenMP 与 一起使用clang-12,我必须确保libomp-dev安装了版本 12,我使用以下 shell 命令执行此操作:

sudo apt -y install libomp-12-dev
Run Code Online (Sandbox Code Playgroud)

clang-12现在,当我将 CMake 用作编译器时,CMake 可以毫无问题地找到 OpenMP 。