不久前,CGAL 5.0 正式被纳入稳定版,和先前的4.14版本相较不仅仅有算法上的“重大改变”和“突破性变化”,其安装、配置也稍有不同,对于不习惯使用CMake生成具体项目文件的人来说,VS属性页的配置也会有些区别。
本人使用的是 Win 10 + VS 2017 + Qt 5.13,更新的VS和Qt版本应该都是可以的。
这里Qt注意两点:
1)本体 CGAL 5.0,Windows下最方便还是用exe吧~
CGAL 5.0.exe
2) CMake 推荐使用最新版本,当前为3.16.2,推荐msi:
CMake
3) 主要依赖库——Boost 最新版本为1.72.0:
Boost 1.7.2
4)其余可能用到的依赖库,以zlib、libQGLViewer、eigen为例:
首先解压boost_1_72_0.7z/boost_1_72_0.zip,解压路径如 C:\dev\boost_1_72_0
运行该目录下bootstrap.bat。稍等,会生成b2.exe和bjam.exe等文件,之后Win+R打开cmd,切换路径至该文件夹,如:
cd C:\dev\boost_1_72_0
由于Boost实在是太大了,全部编译非常耗时和占用磁盘空间,而CGAL仅依赖于system和-thread,因此只编译这两个库:
b2.exe --with-system --with-thread
耐心等待,会得到像这样的结果:
The Boost C++ Libraries were successfully built!
The following directory should be added to compiler include paths:
C:\dev\boost_1_72_0
The following directory should be added to linker library paths:
C:\dev\boost_1_72_0\stage\lib
在 系统属性 - 高级 - 环境变量 的系统变量 或 用户变量 (看需求)中添加变量名 BOOST_INCLUDEDIR 和 BOOST_LIBRARYDIR ,对应变量值分别为上述结果中的两个路径,如:
CMake的安装就不赘述,安装时可以选择添加到PATH。这里简述CMake的使用方法:
在 where is the source code 处填入源代码所在的文件夹,该路径下应有 CMakeLists.txt;
在 where to build the binaries 处填入建构项目的目标文件夹,这个文件夹一般应该是空的;
中间部分为建构项目所需的一些配置,建议勾选“grouped”,显示更一目了然。
Windows下zlib的安装是有些令人困惑的,一些教程也是语焉不详,这里给出的方法如果有问题请提醒我更正。
首先解压,打开 CMake - gui ,where is the source code 填入解压后的文件夹,where to build the binaries 填入一个新建的文件夹,如 C:\dev\zlib_build,一般configure然后generate就行了。configure后可以看一眼,确认下INSTALL下各个路径是不是在C:\Program Files (x86)\zlib 下。
用VS打开 C:\dev\zlib_build\zlib.sln (当然也可能在你选择的其它文件夹里),分别在debug和release模式下,依次右键ALL_BUILD和INSTALL - 生成(应该来说右键INSTALL然后生成就可以了,不确定),这时C:\Program Files (x86)\zlib 下就生成了我们需要的include和lib文件:
(据我后面安装来看,并不需要 libQGLViewer,暂时放这备用)
可以依照官网给出的步骤,解压后,用 Qt Creator 打开 libQGLViewer-2.7.2.pro ,Configure Project时勾选MSVC,右键构建即可。
在debug模式下可能出现报错:无法打开文件“QGLViewerd2.lib”,暂时不知道如何解决,但 QGLViewer\QGLViewerd2.lib 文件实际上可以正常生成(因为QGLViewer子项目可以生成成功),而在release模式下可以正常生成所有项目。
QGLViewer\QGLViewerd2.lib 和 QGLViewer\QGLViewer2.lib 即是我们所需的。
解压即可,如解压至 C:\dev\eigen-3.3.7 。
终于到CGAL本体啦!运行CGAL-5.0-Setup.exe,最好将它安装到一个较简短的路径下,如C:\dev\CGAL-5.0 。 打开CMake,如前述的zlib,第一个where填刚才的路径,第二个where填一个新建的文件夹路径,如C:\dev\CGAL-5.0 build ;
逐条介绍下 CMake 3.13.2+CGAL 5.0 的配置
Generating done后,用VS打开CGAL-5.0 build\CGAL.sln,release模式下右键ALL_BUILD,生成。
以 Surface mesh 为例,打开 CGAL-5.0 build\examples\Surface_mesh\Surface_mesh_Examples.sln,将draw_surface_mesh设为启动项目,release模式编译运行,会发现缺少dll:
最笨的方法当然是逐个将 Qt\Qt5.13.0\5.13.0\msvc2017_64\lib 中各dll复制到 CGAL-5.0 build\examples\Surface_mesh\Release 路径下,也可将这些文件的完整路径名加入到链接 - 输入 - 附加依赖项 中。
究其根本,这是代码生成模式的问题,理论上将 代码生成 - 运行库 从 MD 改为 MT 就可以了,但是直接改会报错,目前尚不清楚原因,麻烦些用动态链接就可以了。
这时还有一个问题是这里并没有源码中所写的 data/elephant.off ,将 CGAL-5.0\examples\Surface_mesh\data 中的该文件复制到 CGAL-5.0 build\examples\Surface_mesh\data 下,运行:
唔,还行吧……
忘了属性页了,如果不愿意用CMake生成的话,如何填写VS属性页呢?
我们可以参考CMake生成文件是如何填写的,在排除Qt的情况下,VS属性页的填写实际上相较4.14更简单了:
链接 - 输入 - 附加依赖项:
C:\dev\CGAL-5.0\auxiliary\gmp\lib\libmpfr-4.lib
C:\dev\CGAL-5.0\auxiliary\gmp\lib\libgmp-10.lib
C/C++ - 常规 -附加包含目录:
C:\dev\CGAL-5.0 build\include
C:\dev\CGAL-5.0\include
C:\dev\CGAL-5.0\auxiliary\gmp\include
C:\dev\boost_1_72_0
当然比较传统的写法是 VC++目录 - 包含目录中填写以上的四项,都是可以的。