HDF5 (Hierarchical Data Format) 由美国伊利诺伊大学厄巴纳-香槟分校 UIUC (University of Illinois at Urbana-Champaign) 开发,是一种常见的跨平台数据储存文件,可以存储不同类型的图像和数码数据,并且可以在不同类型的机器上传输,同时还有统一处理这种文件格式的函数库。
下载hdf5
chcp 65001
cd D:\build
D:
rd /S /Q E:\library\hdf5
vcpkg depend-info hdf5
mkdir myhdfstuff
copy /y hdf5-1.14.3.tar.gz myhdfstuff
cd myhdfstuff
tar -xf hdf5-1.14.3.tar.gz
copy /y hdf5-1.14.3\config\cmake\scripts\CTestScript.cmake .
copy /y hdf5-1.14.3\config\cmake\scripts\HDF5config.cmake .
copy /y hdf5-1.14.3\config\cmake\scripts\HDF5options.cmake .
修改myhdfstuff目录下的HDF5options.cmake,这里修改了以下节点(按需修改):
zlib和szip编译安装请看第4和第5章。
#############################################################################################
#### Only build static libraries ####
#set (ADD_BUILD_OPTIONS "${ADD_BUILD_OPTIONS} -DBUILD_SHARED_LIBS:BOOL=OFF")
#### Only build shared libraries ####
set (ADD_BUILD_OPTIONS "${ADD_BUILD_OPTIONS} -DONLY_SHARED_LIBS:BOOL=ON")
#### Add PIC option on linux/mac ####
#set (ADD_BUILD_OPTIONS "${ADD_BUILD_OPTIONS} -DCMAKE_ANSI_CFLAGS:STRING=-fPIC")
#############################################################################################
#### fortran enabled ####
set (ADD_BUILD_OPTIONS "${ADD_BUILD_OPTIONS} -DHDF5_BUILD_FORTRAN:BOOL=ON")
#### fortran disabled ####
#set (ADD_BUILD_OPTIONS "${ADD_BUILD_OPTIONS} -DHDF5_BUILD_FORTRAN:BOOL=OFF")
#############################################################################################
#############################################################################################
#### java enabled ####
set (ADD_BUILD_OPTIONS "${ADD_BUILD_OPTIONS} -DHDF5_BUILD_JAVA:BOOL=ON")
#### java disabled ####
#set (ADD_BUILD_OPTIONS "${ADD_BUILD_OPTIONS} -DHDF5_BUILD_JAVA:BOOL=OFF")
#############################################################################################
### change install prefix (default use INSTALLDIR value)
set (ADD_BUILD_OPTIONS "${ADD_BUILD_OPTIONS} -DCMAKE_INSTALL_PREFIX:PATH=E:/library/hdf5")
#############################################################################################
#### ext libraries ####
### ext libs from tgz
set (ADD_BUILD_OPTIONS "${ADD_BUILD_OPTIONS} -DHDF5_ALLOW_EXTERNAL_SUPPORT:STRING=TGZ -DTGZPATH:PATH=${CTEST_SCRIPT_DIRECTORY}")
### ext libs from git
#set (ADD_BUILD_OPTIONS "${ADD_BUILD_OPTIONS} -DHDF5_ALLOW_EXTERNAL_SUPPORT:STRING=GIT")
### ext libs on system
#set (ADD_BUILD_OPTIONS "${ADD_BUILD_OPTIONS} -DHDF5_ALLOW_EXTERNAL_SUPPORT:STRING=NO")
set(ENV{ZLIB_ROOT} "E:/library/zlib")
set (ADD_BUILD_OPTIONS "${ADD_BUILD_OPTIONS} -DZLIB_LIBRARY:FILEPATH=E:/library/zlib/lib/zlib.lib -DZLIB_INCLUDE_DIR:PATH=E:/library/zlib/include")
set(ENV{SZIP_ROOT} "E:/library/szip")
set (ADD_BUILD_OPTIONS "${ADD_BUILD_OPTIONS} -DSZIP_LIBRARY:FILEPATH=E:/library/szip/lib/szlib.lib -DSZIP_INCLUDE_DIR:PATH=E:/library/szip/include")
### disable using ext zlib
#set (ADD_BUILD_OPTIONS "${ADD_BUILD_OPTIONS} -DHDF5_ENABLE_Z_LIB_SUPPORT:BOOL=OFF")
### enable using ext szip
set (ADD_BUILD_OPTIONS "${ADD_BUILD_OPTIONS} -DHDF5_ENABLE_SZIP_SUPPORT:BOOL=ON")
set (ADD_BUILD_OPTIONS "${ADD_BUILD_OPTIONS} -DHDF5_ENABLE_SZIP_ENCODING:BOOL=ON")
#############################################################################################
### enable parallel builds
if (DEFINED MPI)
set (ADD_BUILD_OPTIONS "${ADD_BUILD_OPTIONS} -DHDF5_ENABLE_PARALLEL:BOOL=ON")
set (ADD_BUILD_OPTIONS "${ADD_BUILD_OPTIONS} -DHDF5_BUILD_CPP_LIB:BOOL=OFF")
set (ADD_BUILD_OPTIONS "${ADD_BUILD_OPTIONS} -DHDF5_BUILD_JAVA:BOOL=ON")
set (ADD_BUILD_OPTIONS "${ADD_BUILD_OPTIONS} -DHDF5_ENABLE_THREADSAFE:BOOL=OFF")
endif()
如果HDF5options.cmake没有启用FORTRAN跳过此步骤
因为启用了fortran,在开始编译之前还需要设置fortran环境。这里安装的是Intel fortran编译器。
#在开始之前运行fortran环境
"C:\Program Files (x86)\Intel\oneAPI\setvars.bat"
ifort /help
这一步是可选择是否设置
编辑hdf5-1.14.3\CMakeLists.txt,设置文件编码为utf-8,如果不设置在编译过程中会有很多警告。在project (HDF5 C)后面添加即可
add_compile_options("$<$:/utf-8>" )
表示使用源文件采用UTF-8编码方式
开始编译安装,根据你的环境选择一项ctest执行即开始编译安装,ctest是cmke中的模块。
rd /S /Q build
rd /S /Q hdf5.log
#On 32-bit Windows with Visual Studio 2022, execute:
ctest -S HDF5config.cmake,BUILD_GENERATOR=VS2022 -C Release -VV -O hdf5.log
#On 64-bit Windows with Visual Studio 2022, execute:
ctest -S HDF5config.cmake,BUILD_GENERATOR=VS202264 -C Release -VV -O hdf5.log
#On 32-bit Windows with Visual Studio 2019, execute:
ctest -S HDF5config.cmake,BUILD_GENERATOR=VS2019 -C Release -VV -O hdf5.log
#On 64-bit Windows with Visual Studio 2019, execute:
ctest -S HDF5config.cmake,BUILD_GENERATOR=VS201964 -C Release -VV -O hdf5.log
#On 32-bit Windows with Visual Studio 2017, execute:
ctest -S HDF5config.cmake,BUILD_GENERATOR=VS2017 -C Release -VV -O hdf5.log
#On 64-bit Windows with Visual Studio 2017, execute:
ctest -S HDF5config.cmake,BUILD_GENERATOR=VS201764 -C Release -VV -O hdf5.log
#On Linux and Mac, execute:
ctest -S HDF5config.cmake,BUILD_GENERATOR=Unix -C Release -VV -O hdf5.log
注意:ctest运行完成后即表示已经编译并且已安装。根据HDF5options.cmake中的CMAKE_INSTALL_PREFIX配置,hdf5已经安装至E:/library/hdf5,如果没有安装会在myhdfstuff中生成一个HDF5-1.14.x-win64.zip,解压至安装目录即可。
压缩算法
chcp 65001
cd D:\build
D:
rd /S /Q E:\library\zlib
rd /S /Q D:\build\zlib
#显示依赖的包
vcpkg depend-info zlib
git clone https://github.com/madler/zlib.git
cd zlib
vcpkg depend-info zlib
rd /S /Q build
cmake -G "NMake Makefiles" -Wno-dev -DCMAKE_BUILD_TYPE=Release -B build -S . ^
-DBUILD_SHARED_LIBS=ON ^
-DCMAKE_INSTALL_PREFIX:PATH="E:\library\zlib"
cmake --build build --config Release
cmake --install build --config Release
libaec自带szip,所在没有使用,使用的是libaec中的szip
Szip是一个免费软件便携式通用无损压缩 程序。它具有高速和压缩,但对内存的要求很高 (最大 20MB)。
下载szip
chcp 65001
cd D:\build
D:
rd /S /Q E:\library\szip
rd /S /Q D:\build\szip
vcpkg depend-info szip
tar -xf szip-2.1.1.tar.gz
cd szip-2.1.1
rd /S /Q vc_build
cmake -G "NMake Makefiles" -Wno-dev -DCMAKE_BUILD_TYPE=Release -B vc_build -S . ^
-DBUILD_SHARED_LIBS:BOOL=1 ^
-DCMAKE_INSTALL_PREFIX=E:/library/szip
#cmake-gui -B vc_build -S .
cmake --build vc_build --config Release
cmake --install vc_build --config Release