如何在CMake中检查可用的HDF5选项?

fnatzsnv  于 9个月前  发布在  其他
关注(0)|答案(1)|浏览(112)

我正在使用CMake来配置一个包含HDF5支持的项目。我可以使用find_package(HDF5 ...)检测是否安装了HDF5。根据CMake manual entryfind_package调用将设置更多的变量,例如HDF5_IS_PARALLEL
但是,在构建HDF5时,可以设置更多的构建选项。对于我的项目,我需要有一个HDF5安装与HDF5_ENABLE_DIRECT_VFDHDF5_ENABLE_THREADSAFE选项启用。尝试在没有这些选项的情况下使用HDF5安装运行我的项目将无法编译或产生各种运行时错误。

如何在项目的CMake配置期间检测这些选项是否存在于HDF5安装中?

w1jd8yoj

w1jd8yoj1#

我发现了一个可行的方法:HDF5配置存储在库路径中的文件libhdf5.settings中。CMake能够读取和解析这个文件。但是,我没有找到一种可靠的方法来获得正确的路径。尽管如此,对于默认的安装目录,这个代码片段仍然能够解析选项:

find_package(HDF5 COMPONENTS C)

if (HDF5_FOUND) 
    message("HDF5 was found, searching configuration...")
    # this search works for default install path of any version
    # change path if hdf5 was build into a non-default directory
    file(GLOB HDF5_SETTINGS "/usr/local/HDF_Group/HDF5/*/lib/libhdf5.settings") 

    if (HDF5_SETTINGS)
        message("Checking HDF5 settings in : ${HDF5_SETTINGS}")
        file(STRINGS ${HDF5_SETTINGS} HDF5_SETTINGS_CONTENT)
        string(REGEX MATCH "Threadsafety: ON" HDF5_HAS_THREADSAFE ${HDF5_SETTINGS_CONTENT})
        string(REGEX MATCH "Direct VFD: 1" HDF5_HAS_DIRECTIO ${HDF5_SETTINGS_CONTENT})
        if (HDF5_HAS_THREADSAFE AND HDF5_HAS_DIRECTIO)
            message("Correct HDF5 settings found.")
        else()
            message(WARNING "HDF5 Settings are incorrect. Please reinstall HDF5 with --threadsafe and --directvfd options enabled.")
            set(HDF5_FOUND false)
        endif()
    endif(HDF5_SETTINGS)
endif(HDF5_FOUND)

相关问题