1. 環境
操作系統:win10
開發平台:vs2015
Proj4版本:PROJ-6.3
cmake版本:3.17.20200511-g8787079
2. 編譯和安裝
1.下載並解壓
在d盤中新建PROJ文件夾將下載好的PROJ-6.3.zip解壓到PROJ目錄並新建Proj4_build和Proj4_install兩個目錄.目錄結構如下:
d:
├─PROJ
├─Proj4_build
└─Proj4_install
└─PROJ-6.3
└─源代碼文件
2.將上篇編譯《SQLite3在Windows下編譯(VS2015)》文中編譯的SQLite3版本中sqlite3_install拷貝到PROJ-6.3目錄中
d:
├─PROJ
├─Proj4_build
└─Proj4_install
└─PROJ-6.3
└─源代碼文件
└─sqlite3_install
為什么要拷貝到PROJ-6.3中呢?為了后面自動化構建方便。列如set SQLITE3_INCLUDE_DIR="%cd%\sqlite3_install\include" ,將PROJ-6.3作為根目錄。將PROJ整個目錄拷貝到其他機器上如果具有相同環境。可以無需任何配置馬上就可以構建Visual Studio工程
3.在PROJ-6.3目錄中新建一個名為build.bat文件。用於執行camke命令行構建Visual Studio 工程
@echo off
REM 定義SQLite的Include目錄變量
set SQLITE3_INCLUDE_DIR="%cd%\sqlite3_install\include"
REM 定義SQLite的Lib路徑變量
set SQLITE3_LIBRARY="%cd%\sqlite3_install\lib\sqlite3.lib"
REM 定義SQLite的exe路徑變量
set EXE_SQLITE3="%cd%\sqlite3_install\bin\sqlite3.exe"
REM 定義源代碼路徑路徑變量
set src_dir="%cd%"
echo %src_dir%
REM 定義構建VisualStudio工程目錄變量
set build_dir="%cd%/../Proj4_build"
REM 定義安裝目錄變量
set install_dir="%cd%/../Proj4_install"
REM 創建VisualStudio工程目錄
mkdir %build_dir%
REM 創建安裝目錄
mkdir %install_dir%
REM 定義cmake安裝編譯的類型
set CMAKE_BUILD_TYPE=Release
REM 定義cmake安裝目錄
set CMAKE_INSTALL_PREFIX=%install_dir%
REM 回到構建VisualStudio工程目錄
cd %build_dir%
REM 調用camke命令行參數
cmake -G "Visual Studio 14 2015" -A x64 -S %src_dir% -B %build_dir% -DSQLITE3_INCLUDE_DIR=%SQLITE3_INCLUDE_DIR% -DSQLITE3_LIBRARY=%SQLITE3_LIBRARY% -DEXE_SQLITE3=%EXE_SQLITE3% -DCMAKE_BUILD_TYPE=%CMAKE_BUILD_TYPE% -DCMAKE_INSTALL_PREFIX=%CMAKE_INSTALL_PREFIX%
pause
最終文件目錄如下:
d:
├─PROJ
├─Proj4_build
└─Proj4_install
└─PROJ-6.3
└─源代碼文件
└─sqlite3_install
└─build.bat
4.編譯項目
打開Proj4_build目中PROJ4.sln生成解決方案(這里編譯Realse x64版本)
5.安裝項目
在PROJ4.sln中選中INSTALL項目右鍵生成安裝文件會自動生成到Proj4_Install目錄中目錄如下
└─Proj4_install
└─bin
└─cs2cs.exe
└─proj.exe
└─projinfo.exe
└─...
└─include
└─geodesic.h
└─proj.h
└─proj_api.h
└─....
└─lib
└─proj.lib
└─share
└─...
3. cmake命令行參數說明(自己的理解)
-G "Visual Studio 14 2015" :指定生成器為vs 2015。
-A x64 指定生成的平台
-S 指定源代碼目錄
-B 指定構建目錄
-DCMAKE_INSTALL_PREFIX 指CMakeLists.txt中定義 ${CMAKE_INSTALL_PREFIX}
-DSQLITE3_INCLUDE_DIR 指PROJ-6.3/FindSqlite3.cmake中定義 ${SQLITE3_INCLUDE_DIR}
-DSQLITE3_LIBRARY 指PROJ-6.3/FindSqlite3.cmake中定義 ${SQLITE3_LIBRARY}
....
我的理解
-D將上一個camkelist中${變量}即-D變量就可以為camkelist文件中的變量設置值。
具體參考