从5.0版本开始,CGAL仅是一个头文件库,这意味着CGAL无需编译,只需安装好CGAL的依赖项即可。

  • CGAL主要依赖项是boost
  • CGAL还依赖GMP和MPFR(CGAL会提供编译好的)
  • 如果需要使用CGAL的可视化功能,则还需要Qt库

附:CGAL依赖环境、依赖库的详细说明

方法一:自己安装依赖库

CGAL5.0.2 + Windows + VS17

此示例也安装了Qt模块,这意味着安装成功后可使用CGAL的可视化功能。

安装Boost

Boost是CGAL的强制依赖库。下载地址

  1. 下载boost_1_71_0-msvc-XX.Y-64.exe
    1. VS2015选择XX.Y=14.0
    2. VS2017选择14.1
    3. VS2019选择14.2
  2. 运行下载器,安装到D:\local\boost_1_71_0
  3. 设置环境变量,这帮助cmake找到boost
    • BOOST_LIBRARYDIR = D:\local\boost_1_71_0\lib64-msvc-14.1
    • Boost_INCLUDEDIR = D:\local\boost_1_71_0
    • PATH = D:\local\boost_1_71_0\lib64-msvc-14.1

安装CGAL

下载地址
(1)下载CGAL-5.0.2-Setup.exe
这是一个自解压的可执行文件,它会下载CGAL头文件、示例、演示的源代码,还会下载GMP和MPFR的预编译版本

  1. 若提示环境变量设置失败,要让我们自行设置环境变量:PATH = D:\local\CGAL-5.0.2\auxiliary\gmp\lib
  2. 此exe下载器必须完整下载文件,如果报错则代表没有下载完成。建议科学上网,而且网速要快

(2)配置环境变量
CGAL_DIR = D:\local\CGAL-5.0.2,帮助cmake在配置过程中找到CGAL

注:如果你下载的CGAL版本没有提供exe,或者下载速度太慢,可以直接下载提供的zip包

安装Qt

(1)下载适合VS版本的Qt库以及开发包
建议大家安装QT5.13.1,下载地址

(2)添加环境变量

  1. QTDIR = D:\local\Qt\Qt5.13.1,帮助cmake找到Qt
  2. PATH = D:\local\Qt\Qt5.13.1\5.13.1\msvc2017_64\bin。为了避免与另一个文件夹中具有相同名称的另一个dll发生任何冲突,请将此路径添加为列表中的第一个。

(3)在VS中安装Qt插件

  1. 打开VS17,工具—>扩展和更新—>联机—>搜索Qt—>安装Qt Visual Studio Tools
  2. 安装完成后,重启VS,点集文件->新建->项目->Qt就可以关于Qt的信息;并且在工具栏中会有Qt VS Tools选项

(4)配置VS中的Qt插件

  1. 在工具栏中打开Qt VS Tools—>Qt Options—>Add
  2. 添加msvc_2017_64 = D:\local\Qt\Qt5.13.1\5.13.1\msvc2017_64

编译示例

(1)进入目录(cmd命令)

  1. D:\local\CGAL-5.0.2> cd examples\Triangulation_2
  2. D:\local\CGAL-5.0.2\examples\Triangulation_2> mkdir build
  3. D:\local\CGAL-5.0.2\examples\Triangulation_2> cd build
  4. D:\local\CGAL-5.0.2\examples\Triangulation_2\build> cmake-gui ..

(2)使用cmake生成工程文件

  1. 打开cmake的图形界面
  2. where is the source code:D:\local\CGAL-5.0.2\examples\Triangulation_2
  3. where to build the binaries:D:\local\CGAL-5.0.2\examples\Triangulation_2\build
  4. Configure->VS 15 2017,Win64->Finish
  5. Generate

(3)运行

  1. 打开生成的Triangulation_2_Examples.sln文件(目录位置:D:\local\CGAL-5.0.2\examples\Triangulation_2\build
  2. 选择要编译的例子: 将draw_triangulation_2设置为启动项
  3. 运行即可
    CGAL编译与使用(Windows) - 图1

问题:如果没有出现图案
image.png
请把D:\01local\CGAL-5.2.1\examples\Triangulation_2\data文件夹拷贝到D:\01local\CGAL-5.2.1\examples\Triangulation_2\build\Triangulation_2_Examples.sln同目录下即可

在VS中使用CGAL库

引用boost

boost的dll和lib文件名中包含gd的为debug版本,这里以使用release版本为例

  1. include目录:D:\local\boost_1_71_0
  2. lib文件目录:D:\local\boost_1_71_0\lib64-msvc-14.1
  3. lib文件名列表(release版本)

(或者直接D:\local\boost_1_71_0\lib64-msvc-14.1\*.lib

  1. boost_container-vc141-mt-gd-x64-1_71.lib
  2. boost_date_time-vc141-mt-gd-x64-1_71.lib
  3. libboost_exception-vc141-mt-gd-x64-1_71.lib
  4. boost_filesystem-vc141-mt-gd-x64-1_71.lib
  5. boost_graph-vc141-mt-gd-x64-1_71.lib
  6. boost_iostreams-vc141-mt-gd-x64-1_71.lib
  7. boost_locale-vc141-mt-gd-x64-1_71.lib
  8. boost_math_c99-vc141-mt-gd-x64-1_71.lib
  9. boost_math_c99f-vc141-mt-gd-x64-1_71.lib
  10. boost_math_c99l-vc141-mt-gd-x64-1_71.lib
  11. boost_math_tr1-vc141-mt-gd-x64-1_71.lib
  12. boost_math_tr1f-vc141-mt-gd-x64-1_71.lib
  13. boost_math_tr1l-vc141-mt-gd-x64-1_71.lib
  14. boost_prg_exec_monitor-vc141-mt-gd-x64-1_71.lib
  15. boost_random-vc141-mt-gd-x64-1_71.lib
  16. boost_regex-vc141-mt-gd-x64-1_71.lib
  17. boost_serialization-vc141-mt-gd-x64-1_71.lib
  18. boost_system-vc141-mt-gd-x64-1_71.lib
  19. libboost_test_exec_monitor-vc141-mt-gd-x64-1_71.lib
  20. boost_thread-vc141-mt-gd-x64-1_71.lib
  21. boost_unit_test_framework-vc141-mt-gd-x64-1_71.lib
  22. boost_wserialization-vc141-mt-gd-x64-1_71.lib

引用gmp

下载链接:https://github.com/CGAL/cgal/releasesGMP and MPFR libraries, for Windows 64bits的链接

  1. lib目录:D:\local\CGAL-5.0.2\auxiliary\gmp\lib
  2. lib文件名

    1. libgmp-10.lib
    2. libmpfr-4.lib
  3. include目录:D:\local\CGAL-5.0.2\auxiliary\gmp\include

  4. 将dll拷贝到:程序生成的exe所在目录,本例中是D:\codes\Cpp3D\bin\x64\Debug

引用CGAL

CGAL只是一个头文件夹包,只要引用头文件即可

  1. include目录:D:\local\CGAL-5.0.2\include

    Helloworld

    ```cpp

    include

    include

    typedef CGAL::Exact_predicates_exact_constructions_kernel Kernel; //精确谓词、精确构造的内核 typedef Kernel::Point_3 CGPoint3;

using namespace std;

int main() { double x = 2.21231224, y = 3.321443645, z = 4.12335465; CGPoint3 pnt(x, y, z); cout << pnt << endl;

  1. //double x1 = pnt.x();
  2. double x1 = CGAL::to_double(pnt.x());
  3. cout << x1 << endl;
  4. //to_interval
  5. return 0;

}

  1. ![image.png](https://cdn.nlark.com/yuque/0/2020/png/1465826/1598078611128-1de946fe-7a14-4aed-bb13-b76f0a10c057.png#height=49&id=K3RUd&margin=%5Bobject%20Object%5D&name=image.png&originHeight=97&originWidth=296&originalType=binary&ratio=1&size=5450&status=done&style=none&width=148)
  2. <a name="3o2uH"></a>
  3. ### 报错处理
  4. <a name="08689fd5"></a>
  5. #### 在cmake配置时报错:未能找到Boost
  6. 报错:`Could NOT find Boost (missing: Boost_INCLUDE_DIR)`<br />![](https://cdn.nlark.com/yuque/0/2020/png/1465826/1596606758623-05c6d746-f47d-4ad9-8d63-d13ef87bc493.png#height=497&id=b5H5j&originHeight=497&originWidth=954&originalType=binary&ratio=1&size=0&status=done&style=none&width=954)
  7. 解决:虽然设置了BOOST的环境变量,但这里还是找不到。所以修改一下Cmake文件
  8. 1. 打开`CGAL-5.0.2\cmake\modules\CGAL_SetupBoost.cmake`
  9. 1. find_package语句前面,设置BOOST的路径:`SET(BOOST_ROOT "D:\local\boost_1_71_0")`<br />![](https://cdn.nlark.com/yuque/0/2020/png/1465826/1596606758620-19368810-f3e6-46a5-9200-ec0724153549.png#height=407&id=Dyp2U&originHeight=407&originWidth=634&originalType=binary&ratio=1&size=0&status=done&style=none&width=634)
  10. 1. 看到cmake中的变量为`${Boost_INCLUDE_DIRS}``${Boost_LIBRARIES}`,将环境变量改成这个<br />![](https://cdn.nlark.com/yuque/0/2020/png/1465826/1596606758631-e6a9b461-5aaf-4895-9a8c-72e81f39db2a.png#height=121&id=gfwq2&originHeight=121&originWidth=604&originalType=binary&ratio=1&size=0&status=done&style=none&width=604)
  11. <a name="PBlnQ"></a>
  12. #### 编译示例,未找到GMP
  13. 报错:`CMake Error at C:/local/CMake/share/cmake-3.18/Modules/FindPackageHandleStandardArgs.cmake:165 (message): Could NOT find GMP (missing: GMP_LIBRARIES)`<br />![image.png](https://cdn.nlark.com/yuque/0/2021/png/1465826/1616490201182-e8497ea1-5b2d-42d3-a38f-17abfbef98e6.png#height=171&id=YmQUD&margin=%5Bobject%20Object%5D&name=image.png&originHeight=342&originWidth=1081&originalType=binary&ratio=1&size=50930&status=done&style=none&width=540.5)<br />问题:发现`D:\01local\CGAL-5.2.1\auxiliary\gmp`路径中是空的<br />![image.png](https://cdn.nlark.com/yuque/0/2021/png/1465826/1616490261535-fd4c8bd9-2a06-4aea-bc43-357a5ae74aee.png#height=64&id=dHIBP&margin=%5Bobject%20Object%5D&name=image.png&originHeight=128&originWidth=535&originalType=binary&ratio=1&size=8297&status=done&style=none&width=267.5)<br />解决:
  14. 1. 在[网站中](https://github.com/CGAL/cgal/releases)下载CGAL的工具库
  15. ![image.png](https://cdn.nlark.com/yuque/0/2021/png/1465826/1616490307245-f9cd7822-26dc-48a4-9f31-082ef98c8f5a.png#height=186&id=eQhk0&margin=%5Bobject%20Object%5D&name=image.png&originHeight=719&originWidth=1071&originalType=binary&ratio=1&size=75002&status=done&style=none&width=276.5)
  16. 2. 下载之后将gmp拷贝到D:\01local\CGAL-5.2.1\auxiliary\gmp
  17. 2. `D:\01local\CGAL-5.2.1\auxiliary\gmp\lib`配置到Path
  18. <a name="DBeHT"></a>
  19. #### 编译Mesh_3例子报错:未能找到Eigen3
  20. Eigen是一个高层次的C ++库,有效支持线性代数,矩阵和矢量运算,数值分析及其相关的算法。Eigen是一个开源库,从3.1.1版本开始遵从MPL2许可。<br />![image.png](https://cdn.nlark.com/yuque/0/2020/png/1465826/1597384390263-127255a1-ee41-4034-bbf5-8957d981966d.png#height=652&id=NZ0Nu&margin=%5Bobject%20Object%5D&name=image.png&originHeight=652&originWidth=983&originalType=binary&ratio=1&size=80017&status=done&style=none&width=983)<br />安装Eigen3
  21. 1. [Eigen3下载地址](http://eigen.tuxfamily.org/index.php?title=Main_Page),解压到`D:\local`
  22. 1. 配置环境变量:`EIGEN3_INCLUDE_DIR = D:\local\eigen-3.3.7`
  23. 1. 如果发现还会报错,则可以打开`D:\local\CGAL-5.0.2\Cmake\modules/FindEigen3.cmake`,在前面添加上这句话`SET(EIGEN3_INCLUDE_DIR D:/local/eigen-3.3.7)`
  24. ![image.png](https://cdn.nlark.com/yuque/0/2020/png/1465826/1597386752658-427da914-1936-4fc7-b9c7-502e344b0cd6.png#height=582&id=PCwFy&margin=%5Bobject%20Object%5D&name=image.png&originHeight=582&originWidth=946&originalType=binary&ratio=1&size=159160&status=done&style=none&width=946)
  25. 4. 再次配置,cmake即可通过
  26. <a name="5JS6i"></a>
  27. #### 编译demo/Polyhedron失败:未能找到METIS
  28. METIS是一个图分割库(`graph partitioning`)<br />![image.png](https://cdn.nlark.com/yuque/0/2020/png/1465826/1597387574573-5a1300f7-58c2-419e-ae8d-d7e306db42fe.png#height=725&id=uKfeq&margin=%5Bobject%20Object%5D&name=image.png&originHeight=725&originWidth=1008&originalType=binary&ratio=1&size=89954&status=done&style=none&width=1008)<br />[安装metis](https://blog.csdn.net/baidu_38646380/article/details/103998036):
  29. 1. [下载](http://glaros.dtc.umn.edu/gkhome/metis/metis/download)
  30. <a name="jKdxy"></a>
  31. # 方法二:用Vcpkg库管理器安装
  32. 可使用**Vcpkg包管理器**安装CGAL,它会自动安装CGAL的依赖项目<br />这非常方便,但由于网络的问题,安装有时候会出错。
  33. 比如:使用Vcpkg安装CGALqt模块经常报错(`./vcpkg.exe install cgal[qt]:x64-windows`
  34. <a name="0a91bc42"></a>
  35. ### 安装CGAL库
  36. **(1) 安装Vcpkg**
  37. ```shell
  38. D:\local>git clone https://github.com/microsoft/vcpkg
  39. D:\local>cd vcpkg
  40. D:\local\vcpkg>.\bootstrap-vcpkg.bat

(2) 配置Vcpkg的环境变量,修改编译器版本

  1. 打开配置文件:{VCPKG_ROOT}\triplets\x64-windows.cmake
  2. 添加或修改此句话:set(VCPKG_PLATFORM_TOOLSET v141),表明设置为VS2017。否则会以电脑中最新的VC++版本编译

(3) 用Vcpkg安装CGAL

D:\local\vcpkg>.\vcpkg.exe install cgal:x64-windows

(4) 将vckpg下载的内容集成到工程中

  1. 在Vcpkg中生成NuGet配置文件
    D:\local\vcpkg>.\vcpkg.exe integrate project
  2. 在NuGet中添加源
    打开VS->工具->NuGet包管理器->程序包管理器设置->程序包源->添加源->选择vcpkg目录下的“scripts\buildsystems”目录
  3. 在工程中添加vcpkg
    打开VS工程->右键点击需要设置的工程,选择“管理NuGet程序包”->在右上角的“程序包源”中选择刚刚设置的“vcpkg”。这样在“浏览”选项卡中就可以看到“vcpkg.D.local.vcpkg”->安装

至此,CGAL库已安装成功,可以正常使用它的核心功能。

编译示例

(1)下载示例
CGAL官方示例(下载地址),并解压

(2)进入示例文件夹,打开cmake的GUI软件

C:\dev\CGAL-5.0.2> cd examples\Triangulation_2
C:\dev\CGAL-5.0.2\examples\Triangulation_2> mkdir build
C:\dev\CGAL-5.0.2\examples\Triangulation_2> cd build
C:\dev\CGAL-5.0.2\examples\Triangulation_2\build> cmake-gui ..

(3)点击Configure,配置内容

  1. 指定生成器Generator,如VS2017
  2. 指定平台Optional Platform,如x64
  3. 指定交叉编译的工具链文件(toolchain file for cross compilation),即vcpkg.cmake文件(D:\local\vcpkg\scripts\buildsystems\vcpkg.cmake
  4. 如果示例需要Qt库,则填写Qt有关的CMake变量和路径
  5. 点击生成Generate,生成VS工程。即可打开工程并编译

参考文章

  1. vs2017 搭建最新CGAL5.0.2
  2. VS2017安装Qt
  3. windows安装CGAL(VS19+CGAL5.0.2)
  4. Visual Studio引入外部库 —— 弄懂静态库lib和动态库dll