FindOpenMP

Finds Open Multi-Processing (OpenMP) support in a compiler:

find_package(OpenMP [<version>] [COMPONENTS <langs>...] [...])

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.

Добавлено в версии 3.5: Clang support.

Components

This module supports components that can be specified using the standard syntax:

find_package(OpenMP [COMPONENTS <langs>...])

Each of these components controls the various languages to search OpenMP support for. The following components are exposed:

C

Добавлено в версии 3.10.

CXX

Добавлено в версии 3.10.

Fortran

Добавлено в версии 3.10.

CUDA

Добавлено в версии 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, depending on the enabled languages in the project.

Imported Targets

This module provides the following Imported Targets:

OpenMP::OpenMP_<lang>

Добавлено в версии 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

Добавлено в версии 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

This module defines the following variables:

OpenMP_FOUND

Добавлено в версии 3.10.

Boolean indicating that OpenMP flags for all requested languages were found. If no components are specified, this variable is set to boolean true if OpenMP settings for all enabled languages were detected.

OpenMP_VERSION

Добавлено в версии 4.2.

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

Добавлено в версии 3.9.

Boolean indicating whether the (requested version of) OpenMP support for <lang> was detected.

OpenMP_<lang>_VERSION

Добавлено в версии 3.9.

OpenMP version implemented by the <lang> compiler, if available.

OpenMP_<lang>_VERSION_MAJOR

Добавлено в версии 3.9.

Major version of OpenMP implemented by the <lang> compiler, if available.

OpenMP_<lang>_VERSION_MINOR

Добавлено в версии 3.9.

Minor version of OpenMP implemented by the <lang> compiler, if available.

OpenMP_<lang>_SPEC_DATE

Добавлено в версии 3.7.

Date of the OpenMP specification implemented by the <lang> compiler, if available.

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.

OpenMP_<lang>_FLAGS

OpenMP compiler flags for <lang>, separated by spaces.

OpenMP_<lang>_INCLUDE_DIRS

Добавлено в версии 3.16.

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

Добавлено в версии 3.9.

A semicolon-separated list of OpenMP programs libraries for <lang>.

OpenMP_<libname>_LIBRARY

Добавлено в версии 3.9.

Location of the individual libraries needed for OpenMP support in <lang>. The <libname> names are stored in the OpenMP_<lang>_LIB_NAMES list.

OpenMP_<lang>_LIBRARIES

Добавлено в версии 3.9.

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

Добавлено в версии 3.9.

Boolean indicating whether OpenMP is accessible through the omp_lib.h Fortran header.

OpenMP_Fortran_HAVE_OMPLIB_MODULE

Добавлено в версии 3.9.

Boolean indicating whether OpenMP is accessible through the omp_lib Fortran module.

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, or preferably the OpenMP::OpenMP_<lang> imported target.

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)