FindOpenMP¶
查找 Open 多处理 (OpenMP) 支持。
此模块可用于在编译器中检测 OpenMP 支持。如果编译器支持 OpenMP,则会通过变量返回编译所需标志,以便使用 OpenMP 支持编译不同语言。如果编译器不需要特殊标志即可支持 OpenMP,则此类变量可能为空。
在版本 3.5 中添加: Clang 支持。
输入变量¶
可设置以下变量来影响此模块的行为
OpenMP_RUNTIME_MSVC
在版本 3.30 中添加。
使用 MSVC 编译时,指定 OpenMP Runtime。如果将其设置为非空值(例如
experimental
或llvm
),它将作为-openmp:
标志的值传递。
结果变量¶
在版本 3.10 中添加: 此模块公开组件 C
、CXX
和 Fortran
。每个组件都会控制检测 OpenMP 支持的不同语言。
在版本 3.31 中添加: 使用主机上支持 OpenMP 的 CUDA 编译器时,支持 CUDA
语言组件。
会根据启用的组件设置以下变量
OpenMP_FOUND
此变量指示已找到已请求所有语言的 OpenMP 标志。如果未指定任何组件,则在检测到所有已启用语言的 OpenMP 设置时,此变量为 true。
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
;-list,用于
<lang>
的 OpenMP 程序的库。OpenMP_<libname>_LIBRARY
OpenMP 支持所需的各个库在
<lang>
中的位置。OpenMP_<lang>_LIBRARIES
用于链接使用
<lang>
编写的 OpenMP 代码所需的库列表。
此外,此模块还提供 IMPORTED
目标
OpenMP::OpenMP_<lang>
OpenMP 的目标用于
<lang>
。
特别是对于 Fortran,此模块设置以下变量
OpenMP_Fortran_HAVE_OMPLIB_HEADER
布尔值,指示是否可以通过
omp_lib.h
访问 OpenMP。OpenMP_Fortran_HAVE_OMPLIB_MODULE
布尔值,指示是否可以通过
omp_lib
Fortran 模块访问 OpenMP。
此模块还将尝试提供 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
,其中 yyyy
和 mm
表示 <lang>
编译器实现的 OpenMP 规范的年份和月份。
对于某些编译器,可能需要添加头文件搜索路径才能找到相关的 OpenMP 头文件。此位置可能因语言而异。如果需要,模块可能会尝试查找位置,但可以通过设置 OpenMP_<lang>_INCLUDE_DIR
缓存变量直接提供。请注意,此变量是模块的 _input_ 控制。如果需要了解需要哪些 include 目录,项目代码应该使用 OpenMP_<lang>_INCLUDE_DIRS
_output_ 变量。