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

CMake's find_package(OpenMP) cannot find OpenMP when using clang-12

我目前正在尝试使用 cmake 查找 OpenMP。

下面是我的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()

我正在使用 Ubuntu 20.04 并且我安装了 libomp-dev,如下所示:

libomp-dev is already the newest version (1:10.0-50~exp1).

当我将 gcc 设置为我的编译器时,cmake 可以轻松找到 OpenMP。

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

-DCMAKE_C_COMPILER=/usr/bin/clang-12 -DCMAKE_CXX_COMPILER=/usr/bin/clang++-12

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

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

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

正如@Tsyvarev 指出的那样,由于我安装了 libomp-dev 版本 10,如果我使用 clang-10.[=18,CMake 将能够找到 OpenMP =]

因此,为了让我在 clang-12 中使用 OpenMP,我必须确保安装了 libomp-dev 版本 12,我使用以下 shell 命令进行了安装:

sudo apt -y install libomp-12-dev

现在,当我使用 clang-12 作为编译器时,CMake 可以轻松找到 OpenMP。