可參看個人這篇文檔 VS2015編譯GEOS的debug和release版本。api
如今最新的proj5.2.0已經能夠經過cmake進行編譯了,嘗試了一下確實比之前要方便點。解壓下載的proj5.2.0的壓縮包,在cmake界面填入以下路徑:工具
點擊「configure」,選擇合適的編譯器,就會出現上圖的配置選項。這裏注意BUILD_LIBPROJ_SHARED和BUILD_SHARED_LIBS這兩個選項默認是沒有勾選的,若是直接編譯,以後獲得的就會是靜態庫。因爲我須要動態庫,這裏就都勾選了(二者分別勾選的具體含義還須要進一步確認)。此外,CMAKE_INSTALL_PREFIX這個配置項也要注意。cmake獲得的工程都有install工程,生成以後就會自動把須要的頭文件、lib還有dll複製到對應的目錄中去,這樣方便咱們管理。ui
以後點擊「Generate」,以前設置的build目錄中就生成了VS的工程。debug
用VS打開工程,生成解決方案,等待編譯完成。有的VS項目互相依賴,可能須要多生成幾回。最後,生成一次INSTALL項目,以前CMAKE_INSTALL_PREFIX設置的目錄就會有相應的頭文件、dll、lib以及依賴。code
我這裏編譯的是GDAL的2.3.3版本。解壓出gdal-2.3.3目錄,找到目錄中的nmake.opt,裏面記錄着相關的編譯設置。用記事本打開,修改相應的配置。如下#號註釋表示以前的配置,不帶#號的表示修改以後的。htm
#GDAL_HOME = "C:\warmerda\bld" GDAL_HOME = "D:\Work\GDALBuild\gdal-2.3.3\result"
將GDAL_HOME修改成本身想要的目錄。在編譯和安裝指令完成以後,就會把GDAL的全部的精簡依賴發送到這個目錄中。blog
# PROJ stuff # Uncomment the following lines to link PROJ library statically. Otherwise # it will be linked dynamically during runtime. # To use the new API of proj5 or later, use #PROJ_FLAGS = -DPROJ_STATIC -DPROJ_VERSION=5 # for proj 4.x: #PROJ_FLAGS = -DPROJ_STATIC -DPROJ_VERSION=4 #PROJ_INCLUDE = -Id:\projects\proj.4\src PROJ_INCLUDE = -ID:\Work\GDALBuild\proj-5.2.0\src #PROJ_LIBRARY = d:\projects\proj.4\src\proj_i.lib !IFDEF DEBUG PROJ_LIBRARY = D:\Work\GDALBuild\proj-5.2.0\result\x64_debug\local\lib\proj_5_2_d.lib !ELSE PROJ_LIBRARY = D:\Work\GDALBuild\proj-5.2.0\result\x64_release\local\lib\proj_5_2.lib !ENDIF
根據註釋,PROJ_FLAGS是靜態編譯的時候才須要開啓的,而剛纔咱們編譯的Proj4編譯的是動態庫,因此不用管這個配置項目。PROJ_INCLUDE是須要的頭文件,根據實例引用到proj的src目錄便可。PROJ_LIBRARY表示須要的lib,這裏根據是否debug模式,引入剛纔編譯的不一樣的.lib。文檔
# Uncomment for GEOS support (GEOS >= 3.1.0 required) #GEOS_DIR=C:/warmerda/geos #GEOS_CFLAGS = -I$(GEOS_DIR)/capi -I$(GEOS_DIR)/source/headers -DHAVE_GEOS #GEOS_LIB = $(GEOS_DIR)/source/geos_c_i.lib GEOS_DIR=D:/Work/GDALBuild/geos-3.7.1 GEOS_CFLAGS = -I$(GEOS_DIR)/capi -I$(GEOS_DIR)/include -DHAVE_GEOS !IFDEF DEBUG GEOS_LIB = $(GEOS_DIR)/geos_build/x64_debug/geos_c_i_d.lib !ELSE GEOS_LIB = $(GEOS_DIR)/geos_build/x64_release/geos_c_i.lib !ENDIF
這段配置的意思是設置GEOS_DIR爲GEOS的根目錄,GEOS_CFLAGS引用到根目錄下的capi文件夾和include文件夾做爲編譯須要的頭文件,根據是不是debug模式,設置GEOS_LIB爲對應的lib。get
#GDAL_DLL = gdal$(VERSION).dll !IFDEF DEBUG GDAL_DLL = gdal$(VERSION)D_CL.dll !ELSE GDAL_DLL = gdal$(VERSION)_CL.dll !ENDIF
根據這篇文章《自定義編譯gdal庫》,能夠將生成DLL、lib根據是否debug模式改爲不一樣的名稱。嘗試過屢次,修改dll名稱是能夠的,修改lib名稱存在問題。
在安裝VS2015環境後的「開始菜單」中找到「VS2015x64本機工具命令提示符」並啓用。CD到gdal-2.3.3目錄,依次輸入如下指令(debug模式):
nmake -f makefile.vc MSVC_VER=1900 WIN64=1 DEBUG=1 ANALYZE=1 WITH_PDB=1 nmake -f makefile.vc MSVC_VER=1900 WIN64=1 DEBUG=1 ANALYZE=1 WITH_PDB=1 install nmake -f makefile.vc MSVC_VER=1900 WIN64=1 DEBUG=1 ANALYZE=1 WITH_PDB=1 devinstall
第一個指令表示編譯,時間較長。第二個第三個指令表示安裝,會把GDAL的依賴複製到GDAL_HOME制定的的文件夾。若是須要release模式,則輸入如下指令:
nmake -f makefile.vc MSVC_VER=1900 WIN64=1 nmake -f makefile.vc MSVC_VER=1900 WIN64=1 install nmake -f makefile.vc MSVC_VER=1900 WIN64=1 devinstall
最後輸出的結果: