在 Windows 上使用带有 CMake 的 HDF5 库(错误:“找不到 HDF5”)

Posted

技术标签:

【中文标题】在 Windows 上使用带有 CMake 的 HDF5 库(错误:“找不到 HDF5”)【英文标题】:Using HDF5 Libraries with CMake on Windows (Error: "Could NOT find HDF5") 【发布时间】:2017-09-22 08:19:35 【问题描述】:

我想在我的 C++ 程序中使用 HDF5 库。我在 Windows 7 上使用 VS 2010 x64 编译器和 CMake 3.8.0rc2。我安装的 HDF5 版本是 1.8.10(通过运行官方“安装程序”安装)。

在我的 CMakeLists 文件中,我添加了以下几行:

FIND_PACKAGE ( HDF5 REQUIRED )
INCLUDE_DIRECTORIES ($HDF5_INCLUDE_DIRS)
SET (HDF5_LIBS $HDF5_LIBS $HDF5_LIBRARIES)
...
target_link_libraries($PROJECT_NAME $Boost_LIBRARIES $HDF5_LIBS)

CMake 在配置时显示以下错误消息:

Could NOT find HDF5 (missing: HDF5_LIBRARIES)

我还添加了环境变量HDF5_DIRHDF5_ROOT,它们都指向我的HDF5 安装文件夹C:\Develop\HDF5\1.8.10

让 CMake 识别 HDF5 安装我缺少什么?

【问题讨论】:

【参考方案1】:

现在可以通过 vcpkg (https://github.com/Microsoft/vcpkg) 在 Windows 上安装 hdf5

【讨论】:

似乎没有用 find_package 检测到【参考方案2】:

我使用的是过时的 HDF5 版本;当前版本为 HDF5-1.8.18。

很遗憾,CMake-hdf5-1.8.18 存档中缺少 VS 2010 x64 生成器。 VS 2012、2013 和 2015 只有 .bat 文件。不过可以添加其他生成器:

    从 HDF5 下载网站下载 CMake 存档,即从this 网站。确保采用您要安装的版本。 打开文件HDF5config.cmake 搜索CTEST_CMAKE_GENERATOR 为您想要的生成器添加另一个 elseif,即对于 Visual Studio 2010 x64: elseif($BUILD_GENERATOR STREQUAL "VS201064") set(CTEST_CMAKE_GENERATOR "Visual Studio 10 2010 Win64") 创建另一个 .bat 文件,即build-VS2010-64.bat 将 BUILD_GENERATOR 值替换为您在HDF5config.cmake file 中选择的值,即ctest -S HDF5config.cmake,BUILD_GENERATOR=VS201064 -C Release -V -O hdf5.log 运行 .bat 文件 内置的 HDF5 安装将在文件夹 .\build\_CPack_Packages\win64 中可用

之后,我更改了原始问题中显示的 CMakeLists 行,如编译时创建的USING_HDF5_CMake.txt 所示。请注意,我在组件列表中将C 更改为CXX,因为我有C++ 项目。

set (LIB_TYPE STATIC) # or SHARED
string(TOLOWER $LIB_TYPE SEARCH_TYPE)

find_package (HDF5 NAMES hdf5 COMPONENTS CXX $SEARCH_TYPE)
# find_package (HDF5) # Find non-cmake built HDF5
INCLUDE_DIRECTORIES ($HDF5_INCLUDE_DIR)
set (LINK_LIBS $LINK_LIBS $HDF5_CXX_$LIB_TYPE_LIBRARY)

【讨论】:

以上是关于在 Windows 上使用带有 CMake 的 HDF5 库(错误:“找不到 HDF5”)的主要内容,如果未能解决你的问题,请参考以下文章

cmake Windows 10 SDK

DirectX CMake 包括中断 Windows.h

无法在带有 VS2017 的 Windows 10 上安装和使用 gRPC C/C++

带有 cmake 和 glew glfw3 和 glm 库的 Opengl

使用 CMake 在 Windows 10 上构建 uWebSockets

[cmake]如何使用 cmake 在 windows 上包含和链接系统库