编译 Windows 版的 netCDF 4.3.0


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 build
cd build
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" -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-xdr
mkdir build
cd build
cmake -G "NMake Makefiles" ..
nmake
nmake 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 zlib
set (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.0
mkdir build
cd build
D:\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"  ..
nmake
nmake 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一节。 

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值