FindOpenMP¶
查找 Open Multi-Processing (OpenMP) 支持。
此模块可用于检测编译器中的 OpenMP 支持。如果编译器支持 OpenMP,则使用 OpenMP 支持进行编译所需的标志将在不同语言的变量中返回。如果编译器不需要特殊标志来支持 OpenMP,则变量可能为空。
3.5 版本新增: Clang 支持。
输入变量¶
可以设置以下变量来影响此模块的行为
OpenMP_RUNTIME_MSVC
3.30 版本新增。
使用 MSVC 编译时,指定 OpenMP 运行时。如果设置为非空值,例如
experimental
或llvm
,它将作为-openmp:
标志的值传递。
结果变量¶
3.10 版本新增: 该模块公开了组件 C
、CXX
和 Fortran
。 这些组件分别控制要搜索 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
;-list 用于
<lang>
的 OpenMP 程序的库列表。OpenMP_<libname>_LIBRARY
支持
<lang>
中 OpenMP 所需的各个库的位置。OpenMP_<lang>_LIBRARIES
链接用
<lang>
编写的 OpenMP 代码所需的库列表。
此外,该模块还提供 IMPORTED
目标
OpenMP::OpenMP_<lang>
用于
<lang>
的 OpenMP 目标。
专门针对 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
缓存变量直接提供。 请注意,此变量是模块的 _输入_ 控制。 项目代码应使用 OpenMP_<lang>_INCLUDE_DIRS
_输出_ 变量(如果需要知道需要哪些包含目录)。