编译 Windows 版的 netCDF 4.3.0

来源:互联网 发布:人生必读书籍软件 编辑:程序博客网 时间:2024/05/22 11:49


netCDF 4.3.0 通过 cmake 来提供跨平台的编译支持。
然而,编译中有许多依赖库也需要编译,过程颇为复杂。 本文记录备忘。


主要参考  http://gmtrac.soest.hawaii.edu/projects/gmt/wiki/BuildingNetCDF

步骤基本相同,细节略有差异。

 

本例的系统是 Win7 x64。 本文中编译均是 32位。
需要编译的软件均以 D:\software 为 ROOT。
源码统一放在 D:\software\src 下。
系统中已经安装了 VS2008
所有控制台操作均在 VS2008/Tools/VS2008命令提示窗口中进行。

步骤如下

1. 下载 HDF 4.2.9 的二进制共享版版, 安装后的目录是
    C:\Program Files (x86)\HDF_Group\HDF\4.2.9
2. 下载 HDF5 1.8.10 的二进制共享版,安装后的目录是
    C:\Program Files (x86)\HDF_Group\HDF5\1.8.10
3.  编译 cURL 7.24.0 。其它版本可能有问题。
   3.1. 将源码解压到 D:\software\src\curl-7.24.0
   3.2. 修改 D:\software\src\curl-7.24.0\CMakeLists.txt

 

--- curl-7.24.0/CMakeLists.txt.orig     2012-02-27 11:44:29.000000000 +0100+++ curl-7.24.0/CMakeLists.txt  2012-02-27 11:44:29.000000000 +0100@@ -148,9 +148,9 @@ mark_as_advanced(ENABLE_IPV6) if(WIN32)-  find_library(WSOCK32_LIBRARY wsock32)-  find_library(WS2_32_LIBRARY ws2_32)-  list_spaces_append_once(CMAKE_C_STANDARD_LIBRARIES ${WSOCK32_LIBRARY} ${WS2_32_LIBRARY})  # bufferoverflowu.lib+  # Windows standard libraries are located in C:/Program Files/Microsoft SDKs/[...]+  # They are already included in the default MSVC LIBPATH => no find_library is needed!+  list_spaces_append_once(CMAKE_C_STANDARD_LIBRARIES wsock32.lib ws2_32.lib)   if(CURL_DISABLE_LDAP)     # Remove wldap32.lib from space-separated list     string(REPLACE " " ";" _LIST ${CMAKE_C_STANDARD_LIBRARIES})


    
    3.3  运行如下命令

 

d:cd d:\software\src\curl-7.24.0\mkdir buildcd buildcmake -G "NMake Makefiles" -DCMAKE_INSTALL_PREFIX=d:\software -DCMAKE_BUILD_TYPE=Release -DCMAKE_FIND_ROOT_PATH="C:\Program Files (x86)\HDF_Group\HDF5\1.8.10" -DCMAKE_USE_OPENSSL=OFF ..

 
 这里,-DCMAKE_INSTALL_PREFIX=d:\software 表示未来的安装目录。CMake会优先到CMAKE_INSTALL_PREFIX/lib 和 CMAKE_INSTALL_PREFIX/include 中寻找依赖库,因此对于从源码编译的有依赖关系的软件,均指定相同的CMAKE_INSTALL_PREFIX是有好处的。
 -DCMAKE_FIND_ROOT_PATH="C:\Program Files (x86)\HDF_Group\HDF5\1.8.10" 的目的是为了使用hdf5中包含的zlib库。
 
 然后

 

 nmake nmake install


 
4. 编译 XDR
   4.1 从 svn://gmtserver.soest.hawaii.edu/gmt5/sandbox/win32-dev/bsd-xdr  检出源码到 d:\software\src\bsd-xdr
   4.2 编辑其中的 cmake/ConfigUser.cmake
       修改 CMAKE_INSTALL_PREFIX 的值为 d:/software
   4.3 

cd bsd-xdrmkdir buildcd buildcmake -G "NMake Makefiles" ..nmakenmake install


d:\software\bin\xdrsizeof_test 工作正常表示编译正确


5. 编译 netcdf 4.3.0
   解压 netcdr 4.3.0的源码到 d:\software\src\netcdf-4.3.0\
   编辑其中的 cmake/ConfigUser.cmake 设定 HDF, xdr 等的正确路径。本例中
   

# Where netcdf will be installed:set (CMAKE_INSTALL_PREFIX d:/software)# General root path to include and lib dirs:set (CMAKE_FIND_ROOT_PATH d:/software)# Location of HFD4, HDF5 and zlibset (ENV{HDF4_ROOT} "C:\Program Files (x86)\HDF_Group\HDF\4.2.9")set (ENV{HDF5_ROOT} "C:\Program Files (x86)\HDF_Group\HDF5\1.8.10")set (ENV{ZLIB_ROOT} "$ENV{HDF5_ROOT}")# Root directories of libs that are not in CMAKE_FIND_ROOT_PATH:set (CURL_ROOT d:/software)set (XDR_ROOT d:/software)


然后运行命令
   
  

cd netcdf-4.3.0mkdir buildcd buildD:\software\bin>cmake -G "NMake Makefiles" -DCMAKE_INSTALL_PREFIX=d:\software -DCMAKE_BUILD_TYPE=Release -DCMAKE_FIND_ROOT_PATH="C:\Program Files (x86)\HDF_Group\HDF5\1.8.10\cmake"  ..nmakenmake install


6. 将
C:\Program Files (x86)\HDF_Group\HDF\4.2.9\bin
C:\Program Files (x86)\HDF_Group\HDF5\1.8.10\bin
d:\software\lib
三个目录中的所有文件copy 到d:\software\bin 中。

7. 测试
cd d:\software\bin
ncdump  可以看到命令提示信息。


 

这个工作的关键是要理解 CMake查找依赖库的方式。建议仔细阅读

http://www.vtk.org/Wiki/CMake:How_To_Find_Libraries

中Using external libraries一节。