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查找
HDF5C 库(C 绑定)。CXX查找
HDF5C++ 库(C++ 绑定)。Fortran查找
HDF5Fortran 库(Fortran 绑定)。HL此组件可与其他组件结合使用,以查找 C、CXX 和/或 Fortran 的高级 (HL) HDF5 库变体,它们提供高级函数。
如果未指定任何组件,则此模块默认会搜索 C 组件。
导入的目标¶
此模块提供以下 导入目标
HDF5::HDF53.19 版本新增。
封装所有找到的 HDF5 库 (
HDF5_LIBRARIES) 的使用要求的 C 目标,如果找到 HDF5 和所有所需组件,则可用。hdf5::hdf53.19 版本新增。
封装 HDF5 C 库使用要求的 C 目标,如果找到 HDF5 库及其
C组件,则可用。hdf5::hdf5_cpp3.19 版本新增。
封装 HDF5 C 和 C++ 库使用要求的 C 目标,如果找到 HDF5 库及其
C和CXX组件,则可用。hdf5::hdf5_fortran3.19 版本新增。
封装 HDF5 Fortran 库使用要求的 C 目标,如果找到 HDF5 库及其
Fortran组件,则可用。hdf5::hdf5_hl3.19 版本新增。
封装 HDF5 高级 C 库使用要求的 C 目标,如果找到 HDF5 库及其
C和HL组件,则可用。hdf5::hdf5_hl_cpp3.19 版本新增。
高级 C++ 库。
封装 HDF5 高级 C 和高级 C++ 库使用要求的 C 目标,如果找到 HDF5 库及其
C、CXX和HL组件,则可用。hdf5::hdf5_hl_fortran3.19 版本新增。
封装 HDF5 高级 Fortran 库使用要求的 C 目标,如果找到 HDF5 库及其
Fortran和HL组件,则可用。hdf5::h5diff3.19 版本新增。
封装
h5diff可执行文件使用要求的导入可执行目标,如果找到h5diff,则可用。
结果变量¶
此模块定义了以下变量
HDF5_FOUND指示是否找到(请求版本的)HDF5 的布尔值。
HDF5_VERSION3.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_DEFINITIONSHDF5 C 绑定所需的编译器定义。
HDF5_CXX_DEFINITIONSHDF5 C++ 绑定所需的编译器定义。
HDF5_Fortran_DEFINITIONSHDF5 Fortran 绑定所需的编译器定义。
HDF5_C_INCLUDE_DIRSHDF5 C 绑定所需的包含目录。
HDF5_CXX_INCLUDE_DIRSHDF5 C++ 绑定所需的包含目录。
HDF5_Fortran_INCLUDE_DIRSHDF5 Fortran 绑定所需的包含目录。
HDF5_C_LIBRARIESHDF5 C 绑定所需的库。
HDF5_CXX_LIBRARIESHDF5 C++ 绑定所需的库。
HDF5_Fortran_LIBRARIESHDF5 Fortran 绑定所需的库。
HDF5_C_HL_LIBRARIES如果启用了
HL组件,则为高级 C 绑定所需的库。HDF5_CXX_HL_LIBRARIES如果启用了
HL组件,则为高级 C++ 绑定所需的库。HDF5_Fortran_HL_LIBRARIES如果启用了
HL组件,则为高级 Fortran 绑定所需的库。
缓存变量¶
以下缓存变量也可以设置
HDF5_C_COMPILER_EXECUTABLEHDF5 C 封装编译器的路径。
HDF5_CXX_COMPILER_EXECUTABLEHDF5 C++ 封装编译器的路径。
HDF5_Fortran_COMPILER_EXECUTABLEHDF5 Fortran 封装编译器的路径。
HDF5_C_COMPILER_EXECUTABLE_NO_INTERROGATE3.6 版本新增。
主要 C 编译器的路径,该编译器也是 HDF5 封装器。此变量仅在*模块模式*下使用。
HDF5_CXX_COMPILER_EXECUTABLE_NO_INTERROGATE3.6 版本新增。
主要 C++ 编译器的路径,该编译器也是 HDF5 封装器。此变量仅在*模块模式*下使用。
HDF5_Fortran_COMPILER_EXECUTABLE_NO_INTERROGATE3.6 版本新增。
主要 Fortran 编译器的路径,该编译器也是 HDF5 封装器。此变量仅在*模块模式*下使用。
HDF5_DIFF_EXECUTABLEHDF5 数据集比较工具 (
h5diff) 的路径。
提示¶
在调用 find_package(HDF5) 之前可以设置以下变量,以指导 HDF5 库的搜索
HDF5_PREFER_PARALLEL3.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)