FindHDF5

Finds Hierarchical Data Format (HDF5), a library for reading and writing self-describing array data:

find_package(HDF5 [<version>] ... [COMPONENTS <components>...] ...)

If the HDF5 library is built using its CMake-based build system, it will as of HDF5 version 1.8.15 provide its own CMake Package Configuration file (hdf5-config.cmake) for use with the find_package() command in config mode. By default, this module searches for this file and, if found, returns the results based on the found configuration.

If the upstream configuration file is not found, this module falls back to module mode and invokes the HDF5 wrapper compiler typically installed with the HDF5 library. Depending on the configuration, this wrapper compiler is named either h5cc (serial) or h5pcc (parallel). If found, the wrapper is queried with the -show argument to determine the compiler and linker flags required for building an HDF5 client application. Both serial and parallel versions of the HDF5 wrapper are considered. The first directory containing either is used. If both versions are found in the same directory, the serial version is preferred by default. To change this behavior, set the variable HDF5_PREFER_PARALLEL to TRUE.

In addition to finding the include directories and libraries needed to compile an HDF5 application, this module also attempts to find additional tools provided by the HDF5 distribution, which can be useful for regression testing or development workflows.

Components

This module supports optional components, which can be specified with the find_package() command:

find_package(HDF5 [COMPONENTS <components>...])

Supported components include:

C

Finds the HDF5 C library (C bindings).

CXX

Finds the HDF5 C++ library (C++ bindings).

Fortran

Finds the HDF5 Fortran library (Fortran bindings).

HL

This component can be used in combination with other components to find the high-level (HL) HDF5 library variants for C, CXX, and/or Fortran, which provide high-level functions.

If no components are specified, then this module will by default search for the C component.

Imported Targets

This module provides the following Imported Targets:

HDF5::HDF5

在 3.19 版被加入.

Target encapsulating the usage requirements for all found HDF5 libraries (HDF5_LIBRARIES), available if HDF5 and all required components are found.

hdf5::hdf5

在 3.19 版被加入.

Target encapsulating the usage requirements for the HDF5 C library, available if HDF5 library and its C component are found.

hdf5::hdf5_cpp

在 3.19 版被加入.

Target encapsulating the usage requirements for the HDF5 C and C++ libraries, available if HDF5 library, and its C and CXX components are found.

hdf5::hdf5_fortran

在 3.19 版被加入.

Target encapsulating the usage requirements for the HDF5 Fortran library, available if HDF5 library and its Fortran component are found.

hdf5::hdf5_hl

在 3.19 版被加入.

Target encapsulating the usage requirements for the HDF5 high-level C library, available if HDF5 library and its C, and HL components are found.

hdf5::hdf5_hl_cpp

在 3.19 版被加入.

High-level C++ library.

Target encapsulating the usage requirements for the HDF5 high-level C and high-level C++ libraries, available if HDF5 library and its C, CXX, and HL components are found.

hdf5::hdf5_hl_fortran

在 3.19 版被加入.

Target encapsulating the usage requirements for the HDF5 high-level Fortran library, available if HDF5 library and its Fortran, and HL components are found.

hdf5::h5diff

在 3.19 版被加入.

Imported executable target encapsulating the usage requirements for the h5diff executable, available if h5diff is found.

結果變數

This module defines the following variables:

HDF5_FOUND

Boolean indicating whether (the requested version of) HDF5 is found.

HDF5_VERSION

在 3.3 版被加入.

The version of HDF5 library found.

HDF5_INCLUDE_DIRS

Include directories containing header files needed to use HDF5.

HDF5_DEFINITIONS

Required compiler definitions for using HDF5.

HDF5_LIBRARIES

Libraries of all requested bindings needed to link against to use HDF5.

HDF5_HL_LIBRARIES

Required libraries for the HDF5 high-level API for all bindings, if the HL component is enabled.

HDF5_IS_PARALLEL

Boolean indicating whether the HDF5 library has parallel IO support.

For each enabled language binding component, a corresponding HDF5_<LANG>_LIBRARIES variable, and potentially HDF5_<LANG>_DEFINITIONS, will be defined. If the HL component is enabled, then HDF5_<LANG>_HL_LIBRARIES variables will also be defined:

HDF5_C_DEFINITIONS

Required compiler definitions for HDF5 C bindings.

HDF5_CXX_DEFINITIONS

Required compiler definitions for HDF5 C++ bindings.

HDF5_Fortran_DEFINITIONS

Required compiler definitions for HDF5 Fortran bindings.

HDF5_C_INCLUDE_DIRS

Required include directories for HDF5 C bindings.

HDF5_CXX_INCLUDE_DIRS

Required include directories for HDF5 C++ bindings.

HDF5_Fortran_INCLUDE_DIRS

Required include directories for HDF5 Fortran bindings.

HDF5_C_LIBRARIES

Required libraries for the HDF5 C bindings.

HDF5_CXX_LIBRARIES

Required libraries for the HDF5 C++ bindings.

HDF5_Fortran_LIBRARIES

Required libraries for the HDF5 Fortran bindings.

HDF5_C_HL_LIBRARIES

Required libraries for the high-level C bindings, if the HL component is enabled.

HDF5_CXX_HL_LIBRARIES

Required libraries for the high-level C++ bindings, if the HL component is enabled.

HDF5_Fortran_HL_LIBRARIES

Required libraries for the high-level Fortran bindings, if the HL component is enabled.

快取變數

The following cache variables may also be set:

HDF5_C_COMPILER_EXECUTABLE

The path to the HDF5 C wrapper compiler.

HDF5_CXX_COMPILER_EXECUTABLE

The path to the HDF5 C++ wrapper compiler.

HDF5_Fortran_COMPILER_EXECUTABLE

The path to the HDF5 Fortran wrapper compiler.

HDF5_C_COMPILER_EXECUTABLE_NO_INTERROGATE

在 3.6 版被加入.

The path to the primary C compiler which is also the HDF5 wrapper. This variable is used only in module mode.

HDF5_CXX_COMPILER_EXECUTABLE_NO_INTERROGATE

在 3.6 版被加入.

The path to the primary C++ compiler which is also the HDF5 wrapper. This variable is used only in module mode.

HDF5_Fortran_COMPILER_EXECUTABLE_NO_INTERROGATE

在 3.6 版被加入.

The path to the primary Fortran compiler which is also the HDF5 wrapper. This variable is used only in module mode.

HDF5_DIFF_EXECUTABLE

The path to the HDF5 dataset comparison tool (h5diff).

Hints

The following variables can be set before calling the find_package(HDF5) to guide the search for HDF5 library:

HDF5_PREFER_PARALLEL

在 3.4 版被加入.

Set this to boolean true to prefer parallel HDF5 (by default, serial is preferred). This variable is used only in module mode.

HDF5_FIND_DEBUG

在 3.9 版被加入.

Set this to boolean true to get extra debugging output by this module.

HDF5_NO_FIND_PACKAGE_CONFIG_FILE

在 3.8 版被加入.

Set this to boolean true to skip finding and using CMake package configuration file (hdf5-config.cmake).

HDF5_USE_STATIC_LIBRARIES

Set this to boolean value to determine whether or not to prefer a static link to a dynamic link for HDF5 and all of its dependencies.

在 3.10 版被加入: Support for HDF5_USE_STATIC_LIBRARIES on Windows.

範例

Examples: Finding HDF5

Finding HDF5:

find_package(HDF5)

Specifying a minimum required version of HDF5 to find:

find_package(HDF5 1.8.15)

Finding HDF5 and making it required (if HDF5 is not found, processing stops with an error message):

find_package(HDF5 1.8.15 REQUIRED)

Searching for static HDF5 libraries:

set(HDF5_USE_STATIC_LIBRARIES TRUE)
find_package(HDF5)

Specifying components to find high-level C and C++ functions:

find_package(HDF5 COMPONENTS C CXX HL)

Examples: Using HDF5

Finding HDF5 and linking it to a project target:

find_package(HDF5)
target_link_libraries(project_target PRIVATE HDF5::HDF5)

Using Fortran HDF5 and HDF5-HL functions:

find_package(HDF5 COMPONENTS Fortran HL)
target_link_libraries(project_target PRIVATE HDF5::HDF5)