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)使用要求的目标,如果找到 HDF5 和所有必需的组件,则可用。

hdf5::hdf5

3.19 版本新增。

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

hdf5::hdf5_cpp

3.19 版本新增。

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

hdf5::hdf5_fortran

3.19 版本新增。

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

hdf5::hdf5_hl

3.19 版本新增。

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

hdf5::hdf5_hl_cpp

3.19 版本新增。

高级 C++ 库。

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

hdf5::hdf5_hl_fortran

3.19 版本新增。

封装 HDF5 高级 Fortran 库使用要求的目标,如果找到 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 库是否支持并行 I/O。

对于每个启用的语言绑定组件,都会定义相应的 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)