CGAL 在 Windows QT(MinGW) 的环境搭建

文章目录

  • 必要的说明
  • 安装和配置
    • 1. 安装QT
    • 2. 编译安装Boost
    • 3. 安装CGAL
    • 4. 安装CMake
    • 5. 用 CMake 编译 CGAL
    • 6. 用 CMake 编译一个 CGAL的 Example
  • 附1 可选的第三方库
  • 附2 B2 命令
    • Boost库的命名
  • 参考资料

必要的说明

  • CGAL 介绍

    • CGAL 的全称是 Computational Geometry Algorithms Library,计算几何算法库。

    • 它是使用 C++ 语言编写的开源软件,遵从 GPL & LGPL 双重开源协议。

    • 它被广泛应用于几何计算相关的领域,提供众多计算几何相关的数据结构与算法诸如三角剖分,Voronoi 图,多边形,多面体,曲线整理及其应用,网格生成,几何处理,凸壳算法,搜索结构,插值,形状分析,拟合,距离等。当前版本 5.0

    • C++ 编译器需求:要支持 C++ 14 及以上。

      + - -
      Linux GNU g++ 6.3 及以上 Clang 8.0.0
      MS Windows GNU g++ 6.3 及以上 MS Visual C++ 14.0/15.9/16.0
      MacOS X GNU g++ 6.3 及以上 Apple Clang 7.0.2/10.0.1
    • 直接依赖的软件/库有(针对 CGAL 5.0 版本):

      + + -
      QT v5.9.0 及以上 跨平台应用程序和 UI 框架。
      CMake v3.1 及以上 一个跨平台编译器
      STL - C++ 标准模板库
      Boost v1.57 及以上 “准”标准库
      GMP v4.2 及以上 开源多精度数学运算库,GNU Multiple Precision Arithmetic。
      MPFR v2.2.1 及以上 开源多精度数学运算库,GNU Multiple Precision Floating-Point Reliably。
    • 可选的第三方拓展库。非必须,见附录。

  • 安装配置步骤 :

    • 基础环境
      • 系统: Windows 10
      • GCC : 7.3.0 (MinGW-W64, QT包内安装)
    • 准备的软件有
      qt-opensource-windows-x86-5.14.0.exe
      boost_1_72_0.zip
      CGAL-5.0-Setup.exe
      cmake-3.16.2-win64-x64.msi
    1. 安QT(包含了GCC/STL/Qt Creater)
    2. 编译安装Boost
    3. 安装CGAL(以及Gmp)
    4. 安装CMake
    5. 编译CGAL
    6. 编译一个CGaL 案例

安装和配置

1. 安装QT

  1. 安装时注意勾选选择组件
    • Qt 5.14.0 -> MinGW 7.3.0 32-bit
    • Qt 5.14.0 -> MinGW 7.3.0 64-bit
    • Qt 5.14.0 -> Qt Charts
    • Qt 5.14.0 -> Qt Quick 3D
    • Qt 5.14.0 -> Qt Script
    • Developer and Designer Tools -> Qt Creater
    • Developer and Designer Tools -> MinGW 7.3.0 32-bit
    • Developer and Designer Tools -> MinGW 7.3.0 64-bit
  2. 添加环境变量,我的安装位置为 C:\Qt
    C:\Qt\Qt5.14.0\5.14.0\mingw73_64\bin
    C:\Qt\Qt5.14.0\Tools\mingw730_64\bin
  3. 测试一下QT Creater创建项目能否编运行。
  4. CMD 中输入命令,有版本信息回应即编译器 OK 。
    `C:\Users\XLong> gcc -v`
    

2. 编译安装Boost

  1. 在D盘创建新目录 *D:\CGAL* , Boost 解压到该目录下。CMD 进入目录,执行命令如下。
    D:\CGAL\boost_1_72_0> bootstrap.bat gcc
    
  2. 然后执行下面命令,等半天。
    D:\CGAL\boost_1_72_0> b2 --build-type=complete toolset=gcc stage
    
  3. 添加系统环境变量.
    BOOST_INCLUDE : D:\CGAL\boost_1_72_0
    BOOST_LIBRARY : D:\CGAL\boost_1_72_0\stage\lib
  4. 创建QT控制台项目测试一下,首先把 .pro 文件内添加
    INCLUDEPATH += D:\CGAL\boost_1_72_0\
    
    然后写 main.cpp ,代码如下
    #include 
    #include 
    #include 
    using namespace boost;
    using namespace std;
    int main(int argc, char *argv[])
    {
        QCoreApplication a(argc, argv);
        timer t;
        cout<<"max timespan:"<
    得到结果是这样的就OK了
    max timespan:596.523
    min timespan:0.001
    now time elapsed:0.001
    

3. 安装CGAL

  1. 安装到一块好找,*D:\CGAL\CGAL-5.0* ,选64位,勾选自动设置环境变量。具体步骤如下
    -> Next
    -> I Agree
    -> Next
    -> 选择 64-bits -> Next
    -> 选择 D:\CGAL\CGAL-5.0 -> Next
    -> 选择 All users,勾选 CGAL_DIR ,勾选 Add xx to the PATH -> Install
    -> Next
    -> Finish
  2. 如果弹出对话框说没设置好环境变量,手动添加一下这个位置到系统环境变量。
    D:\CGAL\CGAL-5.0\auxiliary\gmp\lib

4. 安装CMake

  1. 安装到 *D:\CGAL\CMake* ,选64位,勾选自动设置环境变量
    -> Next
    -> I Accept -> Next
    -> 选择 Add for all users -> Next
    -> 选择 *D:\CGAL\CMake* -> Next
    -> Install
    -> Finish
  2. CMD 执行,应该出版本信息。
    C:\Users\XLong> cmake -v
    
    假设无法识别命令,手动添加环境变量 D:\CGAL\CMake\bin
  3. 测试,新建目录 *D:\CGAL\CMake\CmakeTest* ,在该目录下新建两个文件。
    test.cpp 内代码如下
    // test.cpp
    #include 
    using namespace std;
    int main()
    {
    	cout<<"Hello Cmake!"<
    CMakeLists.txt 代码如下
    # CMakeLists.txt
    cmake_minimum_required(VERSION 3.0)
    project(test)
    set(SOURCE test)
    add_executable(${PROJECT_NAME} ${SOURCE})
    
    然后 CMD 进入该目录相继执行执行,注意那个 .
    D:\CGAL\CMake\CmakeTest> cmake -G "MinGW Makefiles" .
    D:\CGAL\CMake\CmakeTest> mingw32-make
    
    最后执行,看到该目录下多了一个 test.exe ,点开有 Hello 就对了。

5. 用 CMake 编译 CGAL

  1. 打开图形界面 D:\CGAL\CMake\bin\cmake-gui.exe ,填写

    • Where is the source code: D:/CGAL/CGAL-5.0
    • Where to build the binaries: D:/CGAL/CGAL-5.0/Build
  2. 然后。
    -> Configure ,(弹出创建 /Build 文件夹选确定)
    -> 选择 MinGW Makefiles -> Use default native compilers -> Finish

  3. 如果出现这种错误,一定是找不到对应点路径。不出错直接看 4

    CMake Error at D:/CGAL/CMake/share/cmake-3.16/Modules/FindPackageHandleStandardArgs.cmake:146 (message):
    Could NOT find Boost (missing: Boost_INCLUDE_DIR) (Required is at least version 1.48 )
    
    • 首先勾选cmake-gui.exe主界面的 GroupedAdvanced 选框,展开 Boost 选项卡,
    • Boost_DIR: D:/CGAL/boost_1_72_0
    • Boost_INCLUDE_DIR: D:/CGAL/boost_1_72_0
    • 然后 Generate

    还可能出现这种错误,一定是找不到对应点路径。不出错直接看 4

    CMake Error at D:/CGAL/CMake/share/cmake-3.16/Modules/FindPackageHandleStandardArgs.cmake:146 (message):
    Could NOT find Boost (missing: thread system) (found suitable version "1.72.0", minimum required is "1.48")
    
    • 展开 Boost 选项卡,把
    • Boost_ATOMIC_LIBRARY_DEBUG-NOTFOUND 的手动添加位置。
    • 到 *D:\CGAL\boost_1_72_0\stage\lib* 里找,他们分别是(关于命名看附录),
      D:/CGAL/boost_1_72_0/stage/lib/libboost_atomic-mgw73-mt-sd-x64-1_72.a
      D:/CGAL/boost_1_72_0/stage/lib/libboost_atomic-mgw73-mt-s-x64-1_72.a
      D:/CGAL/boost_1_72_0/stage/lib/libboost_chrono-mgw73-mt-sd-x64-1_72.a
      D:/CGAL/boost_1_72_0/stage/lib/libboost_chrono-mgw73-mt-s-x64-1_72.a
      D:/CGAL/boost_1_72_0/stage/lib/libboost_date_time-mgw73-mt-sd-x64-1_72.a
      D:/CGAL/boost_1_72_0/stage/lib/libboost_date_time-mgw73-mt-s-x64-1_72.a
      
      D:/CGAL/boost_1_72_0/stage/lib/libboost_system-mgw73-mt-sd-x64-1_72.a
      D:/CGAL/boost_1_72_0/stage/lib/libboost_system-mgw73-mt-s-x64-1_72.a
      D:/CGAL/boost_1_72_0/stage/lib/libboost_thread-mgw73-mt-sd-x64-1_72.a
      D:/CGAL/boost_1_72_0/stage/lib/libboost_thread-mgw73-mt-s-x64-1_72.a
      
    • Boost_INCLUDE_DIR: D:/CGAL/boost_1_72_0
    • 展开 BUILD选项卡:
      勾选 BUILD_SHARED_LIBS
    • 展开 CGAL选项卡:
      勾选 CGAL_Boost_USE_STATIC_LIBS
      取消勾选 CGAL_HEAD_ONLY
    • 展开 CMAKE选项卡:
      添加CMAKE_INSTALL_PREFIX: D:/CGAL/CGAL-5.0/CGAL
      添加CMAKE_BUILD_TYPE: Release
    • 点击 Generate
  4. Genernate 后将会出现下面的提示,查看 *D:\CGAL\CGAL-5.0\Build* 目录看到新生成很多 .cmake 文件。

      Configuring done
      Generating done
    
  5. CMDD:/CGAL/CGAL-5.0/Build/ 目录,执行

    D:\CGAL\CGAL-5.0\Build> cmake .
    D:\CGAL\CGAL-5.0\Build> mingw32-make
    D:\CGAL\CGAL-5.0\Build> mingw32-make install
    
  6. 查看 D:/CGAL/CGAL-5.0/CGAL/ 目录生成文件。

  7. 测试一下
    创建 QT 控制台应用程序,命名为 CGALTest,然后在 CGALTest.pro 中添加代码如下

    INCLUDEPATH += D:/CGAL/CGAL-5.0/include/
    INCLUDEPATH += D:/CGAL/boost_1_72_0/
    

    main.cpp 代码如下

    #include 
    #include 
    #include 
    typedef CGAL::Simple_cartesian Kernel;
    typedef Kernel::Point_2 Point_2;
    typedef Kernel::Segment_2 Segment_2;
    typedef Kernel::Segment_2 Segment_2;
    using namespace std;
    int main(int argc, char *argv[])
    {
        QCoreApplication a(argc, argv);
        Point_2 p(1, 1), q(10, 10);
        cout << "p = " << p <
    • 展开 Boost 选项卡,
      • Boost_DIR: D:/CGAL/boost_1_72_0
      • Boost_INCLUDE_DIR: D:/CGAL/boost_1_72_0
    • 展开 CMAKE 选项卡,
      • CMAKE_BUILD_TYPE: Release
      • CMAKE_INSTALL_PREFIX: D:/CGAL/CGAL-5.0/examples/Triangulation_2/Output
    • 然后 Generate
  8. Genernate 后将会出现下面的提示,查看 *D:\CGAL\CGAL-5.0\Build* 目录看到新生成很多 .cmake 文件
    Configuring done
    Generating done
    
  9. CMDD:\CGAL\CGAL-5.0\examples\Triangulation_2\Build 目录,执行
    D:\CGAL\CGAL-5.0\examples\Triangulation_2\Build> cmake .
    D:\CGAL\CGAL-5.0\examples\Triangulation_2\Build> mingw32-make
    
  10. 打开 D:\CGAL\CGAL-5.0\examples\Triangulation_2\Build\draw_triangulation_2.exe 看得到一个控制台和空白的窗口。
  11. D:\CGAL\CGAL-5.0\examples\Triangulation_2\Build\ui_ImageInterface.h
    拷贝到
    D:\CGAL\CGAL-5.0\CGAL\include\CGAL\Qt\ui_ImageInterface.h
    D:\CGAL\CGAL-5.0\examples\Triangulation_2\Build\libCGAL_Qt5_moc_and_resources.a
    拷贝到
    D:\CGAL\CGAL-5.0\CGAL\lib\libCGAL_Qt5_moc_and_resources.a
  12. 测试一下
    创建 QT 控制台应用程序,命名为 DrawTriangulation3d,然后在 DrawTriangulation3d.pro 中添加代码如下
    QT += widgets
    QT += xml
    QT += opengl
    CONFIG += c++14 console
    LIBS += -LD:\CGAL\CGAL-5.0\CGAL\bin\ -lCGAL_Qt5
    INCLUDEPATH += D:\CGAL\CGAL-5.0\include
    INCLUDEPATH += D:\CGAL\boost_1_72_0
    
    main.cpp 代码如下
    #include 
    #define CGAL_USE_BASIC_VIEWER
    #include 
    #include 
    #include 
    #include 
    typedef CGAL::Exact_predicates_inexact_constructions_kernel K;
    typedef CGAL::Delaunay_triangulation_3                   DT3;
    typedef CGAL::Creator_uniform_3          Creator;
    
    int main()
    {
      std::vector points;
      CGAL::Random_points_in_sphere_3 g(1.0);
      std::copy_n(g, 50, std::back_inserter(points));
    
      DT3 dt3(points.begin(), points.end());
    
      CGAL::draw(dt3);
    
      return EXIT_SUCCESS;
    }
    
    编译运行成功就对了。

附1 可选的第三方库

非必须,CGAL 的部分 Demos & Examples 会用到。(针对 CGAL 5.0 版本):

+ + -
Eigen v3.1 及以上 支持线性代数,矩阵和矢量运算,数值分析及其相关的开源算法库。
LEDA v6.2 及以上 数据结构和算法的库,提供实数数据类型。
MPFI v1.4 及以上 提供任意精度的区间算法,使用Mpfr可靠的浮点数表示区间。
RS / RS3 - 用于研究具有有限个复根的多项式系统的实根。
NLT v5.1 及以上 提供带符号的任意长度整数、整数上的向量、矩阵和多项式以及有限域上的数据结构和算法。
ESBTL - 用于生物结构研究的库,在CGAL中有构建3D皮肤表面网格的实例。
TBB - Threading Building Blocks,用于并行计算。
LASlib - 处理以LAS格式存储的激光雷达数据集。
OpenCV - 计算机诗句库。
TensorFlow - 机器学习 & 深度学习。
METIS v5.1 及以上 划分图和生成减少填充矩阵排序的库。
zlib - 数据压缩。
Ceres Solver - 建模和优化。
GLPK - 解决线性规划(LP)、混合整数规划(MIP)和其他相关问题。
SCIP - 混合整数规划(MIP)和混合整数非线性规划(MINLP)。

附2 B2 命令

安装 Boost 执行 bootstrap.bat gcc 命令后会在根目录下生成 b2.exe 文件(老版本中还有biam.exe, b2是bjam的升级版)。

  • build-type
    选择构建集合,可选 minimal | complete , 默认为 minimal 。

  • toolset
    指定编译器,可选的如 borland / gcc / msvc-14.0,如果不指定会自动搜索本地可用的编译器。

  • stage / install
    stage 表示只生成库, install 还会生成包含头文件的 include目录. 推荐使用 stage ,因为 install 生成的 include 目录实际就是源码包下的 boost 目录, 需要 include 的时候可以直接使用, 不需要再次生成,这样可以节省大量的编译时间.

  • with / without
    选择不编译/编译哪些库(类似于黑名单/白名单)。with / without 参数可以多次出现,以限定多个库。如果不设置 with / without 参数,默认全部编译。例如,
    --with-python 的含义是仅编译 python,其他的都不编译。
    --without-python 意思就是除了 python, 其他的都编译。
    查看Boost包含的所有库命令 b2.exe --show-libraries

  • stagedir / prefix
    stage 时使用 stagedir,install 时使用 prefix,表示编译生成文件的路径。推荐给不同的编译环境指定不同的目录,如 Visual Studio 2015 的 x86 应用对应的是 bin/lib32-msvc-14.0,x64 应用对应的是 bin/lib64-msvc-14.0。如果都生成到一个目录下,将没有任何益处,徒增管理难度。如果使用了 install 参数,那么还将在上述指定的目录下生成 include 目录,用于保存头文件。

  • build-dir
    编译生成的中间文件的路径,默认是 Boost 根目录下的 bin.v2 目录,一般无需设置。

  • link
    指定生成静态链接库还是动态态链接库,取值为 static | shared。如不指定,默认使用 static 。推荐使用静态库的方式编译 Boost.python,这样发布程序的时候就不用 Boost 的 dll 了,并且也多占用不了太多空间。

  • runtime-link
    指定运行时是动态还是静态链接其他库。同样有 shared 和 static 两种方式。如果不指定,默认是 shared,一般无需设置。

  • threading
    要编译的库是单线程还是多线程,可取值 single | multi。如果不指定,默认是 multi ,一般无需设置。

  • variant
    debug | release,编译 debug 版本还是 release 版本。一般与最终发布的程序是 debug 还是 release 版相对应。如果不指定,默认两个都编译,一般无需设置。

  • address-model
    编译成 32 位版本还是 64 位版本,可取值 32 | 64。如果不指定,默认两个版本都编译。如果是编译 Boost.python,该参数就要与本地安装的 Python 位数相对应,否则编译会出错,因此最好设置一下。

Boost库的命名

从文件名中看Boost文件信息,例如有文件如下,以 - 分割属性。
libboost_thread-mgw73-mt-d-x64-1_72.dll

  • libboost_thread : 固定前缀 + 库名称。
  • mgw73 : 编译器名称和版本,MinGW 7.3.0 。
  • mt : threading=multi ,没有则代表 threading=single。
  • d : 代表 debug 版本,没有则代表 release 版本。
  • s : runtime-link=static ,没有则代表 runtime-link=shared。
  • x64 : 目标位数,x32 代表 32 位,x64 代表 64 位。
  • 1_72 : Boost 库的版本号,Boost 1.72 版本。
  • .dll : 后缀,动态链接库。

参考资料

[1] https://blog.csdn.net/baidu_41231410/article/details/82806136
[2] https://blog.csdn.net/zhangzq86/article/details/90030094
[3] https://blog.csdn.net/leftwillow/article/details/82793641
[4] https://blog.csdn.net/keneyr/article/details/90033858
[5] https://doc.cgal.org/latest/Manual/index.html

.
.
.
.
.
.


桃花仙人种桃树,又摘桃花换酒钱_

你可能感兴趣的:(Windows应用,C/CPP)