LAMPCAE/cmake/FindHDF5.cmake

156 lines
5.6 KiB
CMake
Raw Blame History

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

# FindHDF5
# --------
#
# Find the HDF5 libraries(Only for HDF5 provided by LAMPCAE)
#
# Result Variables
# ^^^^^^^^^^^^^^^^
#
# The following variables will be defined:
#
# ``HDF5_FOUND`` True if HDF5 found on the local system
#
# ``HDF5_VERSION`` HDF5 Version(x.x.x)
#
# ``HDF5_VERSION_MAJOR`` HDF5 Major Version
#
# ``HDF5_VERSION_MINOR`` HDF5 Minor Version
#
# ``HDF5_VERSION_PATCH`` HDF5 Patch Version
#
# ``HDF5_DIRS`` Location of HDF5(root dir)
#
# ``HDF5_INCLUDE_DIRS`` Location of HDF5 header files
#
# ``HDF5_LIBRARY_DIRS`` Location of HDF5 libraries
#
# ``HDF5_LIBRARIES`` List of the HDF5 libraries found
#
# 防止重复引入
if(LAMPCAE_HDF5_ALREADY_INCLUDED)
return()
endif()
set(LAMPCAE_HDF5_ALREADY_INCLUDED 1)
# find_path 搜索包含某个文件的路径
# 如果在某个路径下发现了该文件,该结果会被存储到该变量中;如果没有找到,存储的结果将会是<VAR>-NOTFOUND
find_path(HDF5_DIRS
NAMES
include/hdf5.h
PATHS
${CMAKE_SOURCE_DIR}/extlib/HDF5
NO_SYSTEM_ENVIRONMENT_PATH
NO_CMAKE_SYSTEM_PATH
)
set(HDF5_VERSION_MAJOR 1)
set(HDF5_VERSION_MINOR 13)
set(HDF5_VERSION_PATCH 1)
set(HDF5_VERSION "${HDF5_VERSION_MAJOR}.${HDF5_VERSION_MINOR}.${HDF5_VERSION_PATCH}")
find_path(HDF5_INCLUDE_DIRS
NAMES
hdf5.h
HINTS
${HDF5_DIRS}/include
)
find_path(HDF5_LIBRARY_DIRS
NAMES
hdf5.lib libhdf5.so
HINTS
${HDF5_DIRS}/lib
)
set(HDF5_LIBRARIES LAMPCAE::HDF5;LAMPCAE::HDF5CPP;LAMPCAE::HDF5HL;LAMPCAE::HDF5HLCPP;LAMPCAE::HDF5TOOLS)
add_library(LAMPCAE::HDF5 SHARED IMPORTED)
add_library(LAMPCAE::HDF5CPP SHARED IMPORTED)
add_library(LAMPCAE::HDF5HL SHARED IMPORTED)
add_library(LAMPCAE::HDF5HLCPP SHARED IMPORTED)
add_library(LAMPCAE::HDF5TOOLS SHARED IMPORTED)
set_property(TARGET LAMPCAE::HDF5 PROPERTY INTERFACE_COMPILE_DEFINITIONS "H5_BUILT_AS_DYNAMIC_LIB")
set_property(TARGET LAMPCAE::HDF5 PROPERTY INTERFACE_INCLUDE_DIRECTORIES ${HDF5_INCLUDE_DIRS})
set_property(TARGET LAMPCAE::HDF5 APPEND PROPERTY IMPORTED_CONFIGURATIONS RELEASE)
set_property(TARGET LAMPCAE::HDF5CPP PROPERTY INTERFACE_COMPILE_DEFINITIONS "H5_BUILT_AS_DYNAMIC_LIB")
set_property(TARGET LAMPCAE::HDF5CPP PROPERTY INTERFACE_INCLUDE_DIRECTORIES ${HDF5_INCLUDE_DIRS})
set_property(TARGET LAMPCAE::HDF5CPP APPEND PROPERTY IMPORTED_CONFIGURATIONS RELEASE)
set_property(TARGET LAMPCAE::HDF5CPP PROPERTY INTERFACE_LINK_LIBRARIES LAMPCAE::HDF5)
set_property(TARGET LAMPCAE::HDF5HL PROPERTY INTERFACE_COMPILE_DEFINITIONS "H5_BUILT_AS_DYNAMIC_LIB")
set_property(TARGET LAMPCAE::HDF5HL PROPERTY INTERFACE_INCLUDE_DIRECTORIES ${HDF5_INCLUDE_DIRS})
set_property(TARGET LAMPCAE::HDF5HL APPEND PROPERTY IMPORTED_CONFIGURATIONS RELEASE)
set_property(TARGET LAMPCAE::HDF5HL PROPERTY INTERFACE_LINK_LIBRARIES LAMPCAE::HDF5)
set_property(TARGET LAMPCAE::HDF5HLCPP PROPERTY INTERFACE_COMPILE_DEFINITIONS "H5_BUILT_AS_DYNAMIC_LIB")
set_property(TARGET LAMPCAE::HDF5HLCPP PROPERTY INTERFACE_INCLUDE_DIRECTORIES ${HDF5_INCLUDE_DIRS})
set_property(TARGET LAMPCAE::HDF5HLCPP APPEND PROPERTY IMPORTED_CONFIGURATIONS RELEASE)
set_property(TARGET LAMPCAE::HDF5HLCPP PROPERTY INTERFACE_LINK_LIBRARIES LAMPCAE::HDF5HL)
set_property(TARGET LAMPCAE::HDF5TOOLS PROPERTY INTERFACE_COMPILE_DEFINITIONS "H5_BUILT_AS_DYNAMIC_LIB")
set_property(TARGET LAMPCAE::HDF5TOOLS PROPERTY INTERFACE_INCLUDE_DIRECTORIES ${HDF5_INCLUDE_DIRS})
set_property(TARGET LAMPCAE::HDF5TOOLS APPEND PROPERTY IMPORTED_CONFIGURATIONS RELEASE)
set_property(TARGET LAMPCAE::HDF5TOOLS PROPERTY INTERFACE_LINK_LIBRARIES LAMPCAE::HDF5)
if(CMAKE_SYSTEM_NAME STREQUAL "Linux")
set_target_properties(LAMPCAE::HDF5 PROPERTIES
IMPORTED_LOCATION_RELEASE "${HDF5_LIBRARY_DIRS}/libhdf5.so.300.1.0"
IMPORTED_SONAME_RELEASE "libhdf5.so.300"
)
set_target_properties(LAMPCAE::HDF5CPP PROPERTIES
IMPORTED_LOCATION_RELEASE "${HDF5_LIBRARY_DIRS}/libhdf5_cpp.so.300.0.1"
IMPORTED_SONAME_RELEASE "libhdf5_cpp.so.300"
)
set_target_properties(LAMPCAE::HDF5HL PROPERTIES
IMPORTED_LOCATION_RELEASE "${HDF5_LIBRARY_DIRS}/libhdf5_hl.so.300.0.1"
IMPORTED_SONAME_RELEASE "libhdf5_hl.so.300"
)
set_target_properties(LAMPCAE::HDF5HLCPP PROPERTIES
IMPORTED_LOCATION_RELEASE "${HDF5_LIBRARY_DIRS}/libhdf5_hl_cpp.so.300.0.1"
IMPORTED_SONAME_RELEASE "libhdf5_hl_cpp.so.300"
)
set_target_properties(LAMPCAE::HDF5TOOLS PROPERTIES
IMPORTED_LOCATION_RELEASE "${HDF5_LIBRARY_DIRS}/libhdf5_tools.so.300.0.1"
IMPORTED_SONAME_RELEASE "libhdf5_tools.so.300"
)
elseif(CMAKE_SYSTEM_NAME STREQUAL "Windows")
set_target_properties(LAMPCAE::HDF5 PROPERTIES
IMPORTED_IMPLIB_RELEASE "${HDF5_LIBRARY_DIRS}/hdf5.lib"
IMPORTED_LOCATION_RELEASE "${HDF5_DIRS}/bin/hdf5.dll"
)
set_target_properties(LAMPCAE::HDF5CPP PROPERTIES
IMPORTED_IMPLIB_RELEASE "${HDF5_LIBRARY_DIRS}/hdf5_cpp.lib"
IMPORTED_LOCATION_RELEASE "${HDF5_DIRS}/bin/hdf5_cpp.dll"
)
set_target_properties(LAMPCAE::HDF5HL PROPERTIES
IMPORTED_IMPLIB_RELEASE "${HDF5_LIBRARY_DIRS}/hdf5_hl.lib"
IMPORTED_LOCATION_RELEASE "${HDF5_DIRS}/bin/hdf5_hl.dll"
)
set_target_properties(LAMPCAE::HDF5HLCPP PROPERTIES
IMPORTED_IMPLIB_RELEASE "${HDF5_LIBRARY_DIRS}/hdf5_hl_cpp.lib"
IMPORTED_LOCATION_RELEASE "${HDF5_DIRS}/bin/hdf5_hl_cpp.dll"
)
set_target_properties(LAMPCAE::HDF5TOOLS PROPERTIES
IMPORTED_IMPLIB_RELEASE "${HDF5_LIBRARY_DIRS}/hdf5_tools.lib"
IMPORTED_LOCATION_RELEASE "${HDF5_DIRS}/bin/hdf5_tools.dll"
)
endif()
include(FindPackageHandleStandardArgs)
# 如果找到所有需要的变量并且版本匹配则将HDF5_FOUND变量设置为TRUE
find_package_handle_standard_args(HDF5
FOUND_VAR
HDF5_FOUND
REQUIRED_VARS
HDF5_DIRS
HDF5_INCLUDE_DIRS
HDF5_LIBRARY_DIRS
HDF5_LIBRARIES
VERSION_VAR
HDF5_VERSION
)