FindOpenMP¶
查找编译器中的 Open Multi-Processing (OpenMP) 支持
find_package(OpenMP [<version>] [COMPONENTS <langs>...] [...])
如果编译器支持 OpenMP,则用于不同语言的编译的标志将通过变量返回。如果编译器不需要特殊标志即可支持 OpenMP,则变量可能为空。
版本 3.5 中新增: Clang 支持。
组件¶
此模块支持可使用标准语法指定的组件
find_package(OpenMP [COMPONENTS <langs>...])
这些组件中的每一个都控制着用于搜索 OpenMP 支持的各种语言。以下组件已公开
C3.10 版本新增。
CXX3.10 版本新增。
Fortran3.10 版本新增。
CUDA在版本 3.31 中添加。
当使用支持主机上 OpenMP 的 CUDA 编译器时,支持
CUDA语言组件。
如果未指定组件,则模块将根据项目中启用的语言自动检查所有组件。
导入的目标¶
此模块提供以下 导入目标
OpenMP::OpenMP_<lang>版本 3.9 中添加。
封装语言
<lang>的 OpenMP 使用要求的目标。
输入变量¶
可以设置以下变量来影响此模块的行为:
OpenMP_RUNTIME_MSVC3.30 版本新增。
使用 MSVC 编译时指定 OpenMP 运行时。如果设置为非空值,例如
experimental或llvm,则会作为-openmp:标志的值传递。
结果变量¶
此模块定义了以下变量
OpenMP_FOUND3.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_DATE3.7 版本中新增。
如果可用,则为
<lang>编译器实现的 OpenMP 规范的日期。规范日期格式为 OpenMP 标准中给出的格式:
yyyymm,其中yyyy和mm分别代表<lang>编译器实现的 OpenMP 规范的年份和月份。OpenMP_<lang>_FLAGS<lang>的 OpenMP 编译器标志,以空格分隔。OpenMP_<lang>_INCLUDE_DIRS3.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.hFortran 头文件访问 OpenMP。OpenMP_Fortran_HAVE_OMPLIB_MODULE版本 3.9 中添加。
布尔值,指示是否可以通过
omp_libFortran 模块访问 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)