FindOpenMP¶
Finds Open Multi-Processing (OpenMP) support in a compiler:
find_package(OpenMP [<version>] [COMPONENTS <components>...] [...])
If the compiler supports OpenMP, the flags required to compile with OpenMP support are returned in variables for the different languages. The variables may be empty if the compiler does not need a special flag to support OpenMP.
Added in version 3.5: Clang support.
Components¶
This module supports components that can be specified using the standard syntax:
find_package(OpenMP [COMPONENTS <components>...])
Each of these components controls the various languages to search OpenMP support for. The following components are exposed:
C
Added in version 3.10.
CXX
Added in version 3.10.
Fortran
Added in version 3.10.
CUDA
Added in version 3.31.
The
CUDA
language component is supported when using a CUDA compiler that supports OpenMP on the host.
If no components are specified, module checks for all of them automatically.
Imported Targets¶
This module provides the following Imported Targets:
OpenMP::OpenMP_<lang>
Added in version 3.9.
Target encapsulating the OpenMP usage requirements for language
<lang>
.
Input Variables¶
The following variables may be set to influence this module's behavior:
OpenMP_RUNTIME_MSVC
Added in version 3.30.
Specify the OpenMP Runtime when compiling with MSVC. If set to a non-empty value, such as
experimental
orllvm
, it will be passed as the value of the-openmp:
flag.
Result Variables¶
This module defines the following variables:
OpenMP_FOUND
Boolean variable indicating that OpenMP flags for all requested languages have been found. If no components are specified, this is true if OpenMP settings for all enabled languages were detected.
OpenMP_VERSION
Minimal version of the OpenMP standard detected among the requested languages, or all enabled languages if no components were specified.
This module will set the following variables per language in the
project, where <lang>
is one of C, CXX, CUDA, or Fortran:
OpenMP_<lang>_FOUND
Variable indicating if OpenMP support for
<lang>
was detected.OpenMP_<lang>_FLAGS
OpenMP compiler flags for
<lang>
, separated by spaces.OpenMP_<lang>_INCLUDE_DIRS
Directories that must be added to the header search path for
<lang>
when using OpenMP.
For linking with OpenMP code written in <lang>
, the following
variables are provided:
OpenMP_<lang>_LIB_NAMES
semicolon-separated list of libraries for OpenMP programs for
<lang>
.OpenMP_<libname>_LIBRARY
Location of the individual libraries needed for OpenMP support in
<lang>
.OpenMP_<lang>_LIBRARIES
A list of libraries needed to link with OpenMP code written in
<lang>
.
Specifically for Fortran, the module sets the following variables:
OpenMP_Fortran_HAVE_OMPLIB_HEADER
Boolean indicating if OpenMP is accessible through
omp_lib.h
.OpenMP_Fortran_HAVE_OMPLIB_MODULE
Boolean indicating if OpenMP is accessible through the
omp_lib
Fortran module.
The module will also try to provide the OpenMP version variables:
OpenMP_<lang>_SPEC_DATE
Added in version 3.7.
Date of the OpenMP specification implemented by the
<lang>
compiler.OpenMP_<lang>_VERSION_MAJOR
Major version of OpenMP implemented by the
<lang>
compiler.OpenMP_<lang>_VERSION_MINOR
Minor version of OpenMP implemented by the
<lang>
compiler.OpenMP_<lang>_VERSION
OpenMP version implemented by the
<lang>
compiler.
The specification date is formatted as given in the OpenMP standard:
yyyymm
where yyyy
and mm
represents the year and month of
the OpenMP specification implemented by the <lang>
compiler.
For some compilers, it may be necessary to add a header search path to find
the relevant OpenMP headers. This location may be language-specific. Where
this is needed, the module may attempt to find the location, but it can be
provided directly by setting the OpenMP_<lang>_INCLUDE_DIR
cache variable.
Note that this variable is an _input_ control to the module. Project code
should use the OpenMP_<lang>_INCLUDE_DIRS
_output_ variable if it needs
to know what include directories are needed.
Examples¶
Finding OpenMP support and linking the imported target to a project target using the C language component:
find_package(OpenMP)
target_link_libraries(project_target PRIVATE OpenMP::OpenMP_C)