Proj6.3在Window上的编译(VS2015)
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文件中的变量设置值。
具体参考