FindOpenMP

查找 Open Multi-Processing (OpenMP) 支持。

此模块可用于检测编译器中的 OpenMP 支持。如果编译器支持 OpenMP,则编译 OpenMP 支持所需的标志将以变量形式返回,用于不同的语言。如果编译器不需要特殊标志来支持 OpenMP,则变量可能为空。

3.5 版本新增:Clang 支持。

输入变量

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

OpenMP_RUNTIME_MSVC

3.30 版本新增。

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

结果变量

3.10 版本新增:该模块公开组件 CCXXFortran。每个组件都控制要搜索 OpenMP 支持的各种语言。

3.31 版本新增:当使用支持主机上 OpenMP 的 CUDA 编译器时,支持 CUDA 语言组件。

根据启用的组件,将设置以下变量

OpenMP_FOUND

指示已找到所有请求语言的 OpenMP 标志的变量。如果未指定组件,则如果检测到所有已启用语言的 OpenMP 设置,则此项为真。

OpenMP_VERSION

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

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

OpenMP_<lang>_FOUND

指示是否检测到 <lang> 的 OpenMP 支持的变量。

OpenMP_<lang>_FLAGS

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

OpenMP_<lang>_INCLUDE_DIRS

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

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

OpenMP_<lang>_LIB_NAMES

;-列表,用于 <lang> 的 OpenMP 程序库。

OpenMP_<libname>_LIBRARY

<lang> 中 OpenMP 支持所需的单个库的位置。

OpenMP_<lang>_LIBRARIES

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

此外,该模块还提供 IMPORTED 目标

OpenMP::OpenMP_<lang>

用于从 <lang> 使用 OpenMP 的目标。

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

OpenMP_Fortran_HAVE_OMPLIB_HEADER

布尔值,指示 OpenMP 是否可通过 omp_lib.h 访问。

OpenMP_Fortran_HAVE_OMPLIB_MODULE

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

该模块还将尝试提供 OpenMP 版本变量

OpenMP_<lang>_SPEC_DATE

3.7 版本中新增。

<lang> 编译器实现的 OpenMP 规范的日期。

OpenMP_<lang>_VERSION_MAJOR

<lang> 编译器实现的 OpenMP 的主版本。

OpenMP_<lang>_VERSION_MINOR

<lang> 编译器实现的 OpenMP 的次版本。

OpenMP_<lang>_VERSION

<lang> 编译器实现的 OpenMP 版本。

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

对于某些编译器,可能需要添加头文件搜索路径才能找到相关的 OpenMP 头文件。此位置可能与语言相关。如果需要,模块可能会尝试查找位置,但可以通过设置 OpenMP_<lang>_INCLUDE_DIR 缓存变量直接提供。请注意,此变量是模块的 _输入_ 控制。如果项目代码需要知道所需的包含目录,则应使用 OpenMP_<lang>_INCLUDE_DIRS _输出_ 变量。