FindHDF5

查找层次数据格式 (HDF5),一个用于读取和写入自描述数组数据的库。

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

如果 HDF5 库是使用其基于 CMake 的构建系统构建的,那么从 HDF5 1.8.15 版本开始,它将提供自己的 CMake 包配置文件(hdf5-config.cmake),以便与 find_package() 命令在*配置模式*下使用。默认情况下,此模块会搜索此文件,如果找到,则根据找到的配置返回结果。

如果未找到上游配置文件,此模块会回退到*模块模式*,并调用通常随 HDF5 库一起安装的 HDF5 封装编译器。根据配置,此封装编译器名为 h5cc(串行)或 h5pcc(并行)。如果找到,则使用 -show 参数查询封装器,以确定构建 HDF5 客户端应用程序所需的编译器和链接器标志。HDF5 封装器的串行和并行版本都被考虑在内。使用第一个包含其中任何一个的目录。如果两个版本在同一目录中找到,则默认优先选择串行版本。要更改此行为,请将变量 HDF5_PREFER_PARALLEL 设置为 TRUE

除了查找编译 HDF5 应用程序所需的包含目录和库之外,此模块还尝试查找 HDF5 分发版提供的其他工具,这些工具可用于回归测试或开发工作流。

组件

此模块支持可选组件,可通过 find_package() 命令指定

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

支持的组件包括

C

查找 HDF5 C 库(C 绑定)。

CXX

查找 HDF5 C++ 库(C++ 绑定)。

Fortran

查找 HDF5 Fortran 库(Fortran 绑定)。

HL

此组件可与其他组件结合使用,以查找 C、CXX 和/或 Fortran 的高级 (HL) HDF5 库变体,它们提供高级函数。

如果未指定任何组件,则此模块默认会搜索 C 组件。

导入的目标

此模块提供以下 导入目标

HDF5::HDF5

3.19 版本新增。

封装所有找到的 HDF5 库 (HDF5_LIBRARIES) 的使用要求的 C 目标,如果找到 HDF5 和所有所需组件,则可用。

hdf5::hdf5

3.19 版本新增。

封装 HDF5 C 库使用要求的 C 目标,如果找到 HDF5 库及其 C 组件,则可用。

hdf5::hdf5_cpp

3.19 版本新增。

封装 HDF5 C 和 C++ 库使用要求的 C 目标,如果找到 HDF5 库及其 CCXX 组件,则可用。

hdf5::hdf5_fortran

3.19 版本新增。

封装 HDF5 Fortran 库使用要求的 C 目标,如果找到 HDF5 库及其 Fortran 组件,则可用。

hdf5::hdf5_hl

3.19 版本新增。

封装 HDF5 高级 C 库使用要求的 C 目标,如果找到 HDF5 库及其 CHL 组件,则可用。

hdf5::hdf5_hl_cpp

3.19 版本新增。

高级 C++ 库。

封装 HDF5 高级 C 和高级 C++ 库使用要求的 C 目标,如果找到 HDF5 库及其 CCXXHL 组件,则可用。

hdf5::hdf5_hl_fortran

3.19 版本新增。

封装 HDF5 高级 Fortran 库使用要求的 C 目标,如果找到 HDF5 库及其 FortranHL 组件,则可用。

hdf5::h5diff

3.19 版本新增。

封装 h5diff 可执行文件使用要求的导入可执行目标,如果找到 h5diff,则可用。

结果变量

此模块定义了以下变量

HDF5_FOUND

指示是否找到(请求版本的)HDF5 的布尔值。

HDF5_VERSION

3.3 版本中新增。

找到的 HDF5 库版本。

HDF5_INCLUDE_DIRS

包含使用 HDF5 所需头文件的目录。

HDF5_DEFINITIONS

使用 HDF5 所需的编译器定义。

HDF5_LIBRARIES

使用 HDF5 所需的所有请求绑定的链接库。

HDF5_HL_LIBRARIES

如果启用了 HL 组件,则为所有绑定的 HDF5 高级 API 所需的库。

HDF5_IS_PARALLEL

指示 HDF5 库是否支持并行 IO 的布尔值。

对于每个启用的语言绑定组件,都会定义一个相应的 HDF5_<LANG>_LIBRARIES 变量,并可能定义 HDF5_<LANG>_DEFINITIONS。如果启用了 HL 组件,则还会定义 HDF5_<LANG>_HL_LIBRARIES 变量。

HDF5_C_DEFINITIONS

HDF5 C 绑定所需的编译器定义。

HDF5_CXX_DEFINITIONS

HDF5 C++ 绑定所需的编译器定义。

HDF5_Fortran_DEFINITIONS

HDF5 Fortran 绑定所需的编译器定义。

HDF5_C_INCLUDE_DIRS

HDF5 C 绑定所需的包含目录。

HDF5_CXX_INCLUDE_DIRS

HDF5 C++ 绑定所需的包含目录。

HDF5_Fortran_INCLUDE_DIRS

HDF5 Fortran 绑定所需的包含目录。

HDF5_C_LIBRARIES

HDF5 C 绑定所需的库。

HDF5_CXX_LIBRARIES

HDF5 C++ 绑定所需的库。

HDF5_Fortran_LIBRARIES

HDF5 Fortran 绑定所需的库。

HDF5_C_HL_LIBRARIES

如果启用了 HL 组件,则为高级 C 绑定所需的库。

HDF5_CXX_HL_LIBRARIES

如果启用了 HL 组件,则为高级 C++ 绑定所需的库。

HDF5_Fortran_HL_LIBRARIES

如果启用了 HL 组件,则为高级 Fortran 绑定所需的库。

缓存变量

以下缓存变量也可以设置

HDF5_C_COMPILER_EXECUTABLE

HDF5 C 封装编译器的路径。

HDF5_CXX_COMPILER_EXECUTABLE

HDF5 C++ 封装编译器的路径。

HDF5_Fortran_COMPILER_EXECUTABLE

HDF5 Fortran 封装编译器的路径。

HDF5_C_COMPILER_EXECUTABLE_NO_INTERROGATE

3.6 版本新增。

主要 C 编译器的路径,该编译器也是 HDF5 封装器。此变量仅在*模块模式*下使用。

HDF5_CXX_COMPILER_EXECUTABLE_NO_INTERROGATE

3.6 版本新增。

主要 C++ 编译器的路径,该编译器也是 HDF5 封装器。此变量仅在*模块模式*下使用。

HDF5_Fortran_COMPILER_EXECUTABLE_NO_INTERROGATE

3.6 版本新增。

主要 Fortran 编译器的路径,该编译器也是 HDF5 封装器。此变量仅在*模块模式*下使用。

HDF5_DIFF_EXECUTABLE

HDF5 数据集比较工具 (h5diff) 的路径。

提示

在调用 find_package(HDF5) 之前可以设置以下变量,以指导 HDF5 库的搜索

HDF5_PREFER_PARALLEL

3.4 版本新增。

将其设置为布尔值 true 以优先选择并行 HDF5(默认情况下,串行优先)。此变量仅在*模块模式*下使用。

HDF5_FIND_DEBUG

版本 3.9 中添加。

将其设置为布尔值 true 以获取此模块的额外调试输出。

HDF5_NO_FIND_PACKAGE_CONFIG_FILE

版本 3.8 新增。

将其设置为布尔值 true 以跳过查找和使用 CMake 包配置文件(hdf5-config.cmake)。

HDF5_USE_STATIC_LIBRARIES

将其设置为布尔值以确定是否优先选择 HDF5 及其所有依赖项的静态链接而不是动态链接。

在 3.10 版本中新增:对 Windows 上的 HDF5_USE_STATIC_LIBRARIES 的支持。

示例

示例:查找 HDF5

查找 HDF5

find_package(HDF5)

指定要查找的 HDF5 的最低版本

find_package(HDF5 1.8.15)

查找 HDF5 并使其成为必需(如果未找到 HDF5,处理将停止并显示错误消息)

find_package(HDF5 1.8.15 REQUIRED)

搜索静态 HDF5 库

set(HDF5_USE_STATIC_LIBRARIES TRUE)
find_package(HDF5)

指定组件以查找高级 C 和 C++ 函数

find_package(HDF5 COMPONENTS C CXX HL)

示例:使用 HDF5

查找 HDF5 并将其链接到项目目标

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

使用 Fortran HDF5 和 HDF5-HL 函数

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