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)使用要求的目标,如果找到 HDF5 和所有必需的组件,则可用。hdf5::hdf53.19 版本新增。
封装 HDF5 C 库使用要求的目标,如果找到 HDF5 库及其
C组件,则可用。hdf5::hdf5_cpp3.19 版本新增。
封装 HDF5 C 和 C++ 库使用要求的目标,如果找到 HDF5 库及其
C和CXX组件,则可用。hdf5::hdf5_fortran3.19 版本新增。
封装 HDF5 Fortran 库使用要求的目标,如果找到 HDF5 库及其
Fortran组件,则可用。hdf5::hdf5_hl3.19 版本新增。
封装 HDF5 高级 C 库使用要求的目标,如果找到 HDF5 库及其
C和HL组件,则可用。hdf5::hdf5_hl_cpp3.19 版本新增。
高级 C++ 库。
封装 HDF5 高级 C 和高级 C++ 库使用要求的目标,如果找到 HDF5 库及其
C、CXX和HL组件,则可用。hdf5::hdf5_hl_fortran3.19 版本新增。
封装 HDF5 高级 Fortran 库使用要求的目标,如果找到 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 库是否支持并行 I/O。
对于每个启用的语言绑定组件,都会定义相应的 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)