FindOpenMP

查找编译器中的 Open Multi-Processing (OpenMP) 支持

find_package(OpenMP [<version>] [COMPONENTS <langs>...] [...])

如果编译器支持 OpenMP,则用于不同语言的编译的标志将通过变量返回。如果编译器不需要特殊标志即可支持 OpenMP,则变量可能为空。

版本 3.5 中新增: Clang 支持。

组件

此模块支持可使用标准语法指定的组件

find_package(OpenMP [COMPONENTS <langs>...])

这些组件中的每一个都控制着用于搜索 OpenMP 支持的各种语言。以下组件已公开

C

3.10 版本新增。

CXX

3.10 版本新增。

Fortran

3.10 版本新增。

CUDA

在版本 3.31 中添加。

当使用支持主机上 OpenMP 的 CUDA 编译器时,支持 CUDA 语言组件。

如果未指定组件,则模块将根据项目中启用的语言自动检查所有组件。

导入的目标

此模块提供以下 导入目标

OpenMP::OpenMP_<lang>

版本 3.9 中添加。

封装语言 <lang> 的 OpenMP 使用要求的目标。

输入变量

可以设置以下变量来影响此模块的行为:

OpenMP_RUNTIME_MSVC

3.30 版本新增。

使用 MSVC 编译时指定 OpenMP 运行时。如果设置为非空值,例如 experimentalllvm,则会作为 -openmp: 标志的值传递。

结果变量

此模块定义了以下变量

OpenMP_FOUND

3.10 版本新增。

布尔值,表示已找到所有请求语言的 OpenMP 标志。如果未指定组件,则当检测到所有启用语言的 OpenMP 设置时,此变量将设置为布尔 true。

OpenMP_VERSION

版本 4.2 中添加。

在请求的语言中检测到的 OpenMP 标准的最低版本,如果未指定组件,则为所有启用语言的最低版本。

此模块将为项目中的每种语言设置以下变量,其中 <lang> 是 C、CXX、CUDA 或 Fortran 之一

OpenMP_<lang>_FOUND

版本 3.9 中添加。

布尔值,表示是否检测到 <lang> 的(请求版本的)OpenMP 支持。

OpenMP_<lang>_VERSION

版本 3.9 中添加。

如果可用,则为 <lang> 编译器实现的 OpenMP 版本。

OpenMP_<lang>_VERSION_MAJOR

版本 3.9 中添加。

如果可用,则为 <lang> 编译器实现的 OpenMP 的主版本。

OpenMP_<lang>_VERSION_MINOR

版本 3.9 中添加。

如果可用,则为 <lang> 编译器实现的 OpenMP 的次版本。

OpenMP_<lang>_SPEC_DATE

3.7 版本中新增。

如果可用,则为 <lang> 编译器实现的 OpenMP 规范的日期。

规范日期格式为 OpenMP 标准中给出的格式:yyyymm,其中 yyyymm 分别代表 <lang> 编译器实现的 OpenMP 规范的年份和月份。

OpenMP_<lang>_FLAGS

<lang> 的 OpenMP 编译器标志,以空格分隔。

OpenMP_<lang>_INCLUDE_DIRS

3.16 版新增。

在使用 OpenMP 时必须添加到 <lang> 的头文件搜索路径中的目录。

为了链接用 <lang> 编写的 OpenMP 代码,提供了以下变量

OpenMP_<lang>_LIB_NAMES

版本 3.9 中添加。

<lang> 的 OpenMP 程序库的 分号分隔列表

OpenMP_<libname>_LIBRARY

版本 3.9 中添加。

<lang> 中 OpenMP 支持所需的单个库的位置。<libname> 名称存储在 OpenMP_<lang>_LIB_NAMES 列表中。

OpenMP_<lang>_LIBRARIES

版本 3.9 中添加。

链接用 <lang> 编写的 OpenMP 代码所需的库的列表。

特别是对于 Fortran,该模块设置了以下变量

OpenMP_Fortran_HAVE_OMPLIB_HEADER

版本 3.9 中添加。

布尔值,指示是否可以通过 omp_lib.h Fortran 头文件访问 OpenMP。

OpenMP_Fortran_HAVE_OMPLIB_MODULE

版本 3.9 中添加。

布尔值,指示是否可以通过 omp_lib Fortran 模块访问 OpenMP。

对于某些编译器,可能需要添加头文件搜索路径来查找相关的 OpenMP 头文件。此位置可能因语言而异。在需要的位置,模块可能会尝试查找该位置,但可以通过设置 OpenMP_<lang>_INCLUDE_DIR 缓存变量直接提供。请注意,此变量是模块的输入控件。项目代码应使用 OpenMP_<lang>_INCLUDE_DIRS输出变量,如果需要知道需要哪些包含目录,或者最好是 OpenMP::OpenMP_<lang> 导入的目标。

示例

查找 OpenMP 支持并将导入的目标链接到使用 C 语言组件的项目目标

find_package(OpenMP)
target_link_libraries(project_target PRIVATE OpenMP::OpenMP_C)