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 库及其
C
和CXX
组件,则可用。hdf5::hdf5_fortran
3.19 版本新增。
封装 HDF5 Fortran 库使用要求的 C 目标,如果找到 HDF5 库及其
Fortran
组件,则可用。hdf5::hdf5_hl
3.19 版本新增。
封装 HDF5 高级 C 库使用要求的 C 目标,如果找到 HDF5 库及其
C
和HL
组件,则可用。hdf5::hdf5_hl_cpp
3.19 版本新增。
高级 C++ 库。
封装 HDF5 高级 C 和高级 C++ 库使用要求的 C 目标,如果找到 HDF5 库及其
C
、CXX
和HL
组件,则可用。hdf5::hdf5_hl_fortran
3.19 版本新增。
封装 HDF5 高级 Fortran 库使用要求的 C 目标,如果找到 HDF5 库及其
Fortran
和HL
组件,则可用。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)