FindOpenMP

Finds Open Multi-Processing (OpenMP) support.

This module can be used to detect OpenMP support in a compiler. 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.

New in version 3.5: Clang support.

Input Variables

The following variables may be set to influence this module's behavior:

OpenMP_RUNTIME_MSVC

New in version 3.30.

Specify the OpenMP Runtime when compiling with MSVC. If set to a non-empty value, such as experimental or llvm, it will be passed as the value of the -openmp: flag.

Result Variables

New in version 3.10: The module exposes the components C, CXX, and Fortran. Each of these controls the various languages to search OpenMP support for.

Depending on the enabled components the following variables will be set:

OpenMP_FOUND

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 your project, where <lang> is one of C, CXX, 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

;-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>.

Additionally, the module provides IMPORTED targets:

OpenMP::OpenMP_<lang>

Target for using OpenMP from <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

New 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.