如何在visual studio 2019的IDE下配置CGAL

如何在visual studio 2019的IDE下配置CGAL

写在前面:

CGAL的配置官方文档https://doc.cgal.org/latest/Manual/windows.html,照着官方文档尝试了一下,在第一种方法中:vcpkg install cgal的过程中有一个bug:yasm_tool:X64-widows安装失败,实在是没有办法解决了,官方提到的那个bug是x86的yasm_tool,应该是被修复了;第二种方法中,尝试使用cmake对最新版本的CGAL进行编译,但是在build的的过程中失败了!我头大了!最新版本的CGAL好像是更改了它的文档存储方式,我退到了更早版本的cgal进行了尝试 ,终于成功了!

概述

CGAL的安装主要是两个步骤:配置好CGAL的依赖库,主要是三个:boost(这个不知道是干啥的),gmp以及mpfr(这两个应该是和浮点数的精度控制有关的);第二步是编译和连接CGAL。

配置依赖库

boost的源码地址在这里,下载并且运行boost_1_77_0-msvc-XX.Y-64.exe这个程序,其中XX.Y = 14.0是配合VC 2015, XX.Y = 14.1是配合VC 2017, XX.Y = 14.2是配合VC 2019的。
初始化界面
运行的界面,可以修改安装的位置,点击next就开始配置了
在这里插入图片描述
点击finish完成安装在这里插入图片描述
安装后的条目大概是这样,然后需要修改电脑的环境变量(右键我的电脑,属性,高级设置,环境变量)
需要添加两个环境变量和一条path(这个变量是电脑里原来就有的):

  • BOOST_LIBRARYDIR:D:\compile\boost_1_71_0\lib64-msvc-14.2(lib64-msvc-14.2所在的路径)
  • BOOST_INCLUDEDIR:D:\compile\boost_1_71_0(boost_1_71_0所在的路径)
  • PATH:D:\compile\boost_1_71_0\lib64-msvc-14.2(lib64-msvc-14.2所在的路径)

这里添加的变量值是指的路径,并不是大家一定要填一样的。这些变量的添加是为了后续的CGAL的编译以及使用方便。gmp以及mpfr这两个必须的依赖库是直接包含在CGAL中的,可以不用另行添加。

编译CGAL

CGAL的源码在这里,因为我在编译最新版本的CGAL时出了些问题,所以我下载了之前的版本。下载并运行CGAL-4.12-beta1-Setup.exe。
在这里插入图片描述
点击next
在这里插入图片描述
点击I agree在这里插入图片描述
点击next在这里插入图片描述
选择64位,点击next
在这里插入图片描述
选择安装的文件夹,点击next
在这里插入图片描述
点击install在这里插入图片描述
装好了大概有这样的内容,build是cmake之后生成的。我是用的是cmake的gui进行处理的
在这里插入图片描述
标记的地方是需要添加的内容,上面一个是安装cgal的根目录路径,下面一个是cmake生成的文件的保存路径,填好了点击configure
在这里插入图片描述
点击finish
在这里插入图片描述
点击generate,cmake部分的工作就完成了,打开刚才的bulid文件夹
在这里插入图片描述
找到CGAL.sln,双击打开在这里插入图片描述
右键ALL BUILD,点击生成即可。

test

配置好环境后,需要在新建的项目文件的属性,VC++目录的的包含目录中添加:

  • D:\local\boost_1_71_0(安装boost_1_71_0的目录)
  • D:\compile\cgal\auxiliary\gmp\include(gmp的include目录,这个在安装CGAL的auxiliary目录下找)
  • D:\compile\cgal\include(CGAL的include目录)
  • D:\compile\cgal\build\include\CGAL(编译生成CGAL的include目录)

在VC++目录的的库目录中添加:

  • D:\compile\cgal\build\lib(编译生成CGAL的库目录)
  • D:\compile\cgal\auxiliary\gmp\lib(gmp的库目录)
  • D:\local\boost_1_71_0\libs(boost的库目录)

在链接器的输入中添加:

  • libgmp-10.lib
  • libmpfr-4.lib
  • kernel32.lib
  • user32.lib
  • CGAL_Core-vc140-mt-gd-4.11.lib
  • CGAL_ImageIO-vc140-mt-gd-4.11.lib
  • CGAL-vc140-mt-gd-4.11.lib
#include <iostream>
#include<CGAL/Simple_cartesian.h>
#include<CGAL/Exact_predicates_exact_constructions_kernel.h>


typedef CGAL::Exact_predicates_exact_constructions_kernel Kernel;;

//typedef CGAL::Simple_cartesian<double> Kernel;
//笛卡尔坐标系下的对象
typedef Kernel::Point_2 Point_2;
//顶点
typedef Kernel::Segment_2 Segment_2;
//直线


int main()
{
    Point_2 p(0, 0.3), q, r(2, 0.9);
    {
        q = Point_2(1, 0.6);
        std::cout << (CGAL::collinear(p, q, r) ? "collinear\n" : "not collinear\n");
    }
    {
        std::istringstream input("0 0.3   1 0.6   2 0.9");
        input >> p >> q >> r;
        std::cout << (CGAL::collinear(p, q, r) ? "collinear\n" : "not collinear\n");
    }
    {
        q = CGAL::midpoint(p, r);
        std::cout << (CGAL::collinear(p, q, r) ? "collinear\n" : "not collinear\n");
    }
    //amazing part for rounding 
    //test co-planer
    /*{
        Point_2 p(0, 0.3), q(1, 0.6), r(2, 0.9);
        std::cout << (CGAL::collinear(p, q, r) ? "collinear\n" : "not collinear\n");
    }
    {
        Point_2 p(0, 1.0 / 3.0), q(1, 2.0 / 3.0), r(2, 1);
        std::cout << (CGAL::collinear(p, q, r) ? "collinear\n" : "not collinear\n");
    }
    {
        Point_2 p(0, 0), q(1, 1), r(2, 2);
        std::cout << (CGAL::collinear(p, q, r) ? "collinear\n" : "not collinear\n");
    }*/



    //simple test to learn CGAL
    /*Point_2 p(1, 1), q(10, 10);
    std::cout << "p = " << p << std::endl;
    std::cout << "q = " << q.x() << " " << q.y() << std::endl;
    //输出点的坐标,以及访问顶点的两种方式
    std::cout << "sqdist(p,q) = "
        << CGAL::squared_distance(p, q) << std::endl;
    //输出两个顶点的距离的平方
    Segment_2 s(p, q);
    Point_2 m(5, 9);
    std::cout << "m = " << m << std::endl;
    std::cout << "sqdist(Segment_2(p,q), m) = "
        << CGAL::squared_distance(s, m) << std::endl;
    std::cout << "p, q, and m ";
    switch (CGAL::orientation(p, q, m)) {
    case CGAL::COLLINEAR:
        std::cout << "are collinear\n";
        break;
    case CGAL::LEFT_TURN:
        std::cout << "make a left turn\n";
        break;
    case CGAL::RIGHT_TURN:
        std::cout << "make a right turn\n";
        break;
    }
    std::cout << " midpoint(p,q) = " << CGAL::midpoint(p, q) << std::endl;*/
    return 0;
}

这是CGAL的一段测试代码,运行时需要在项目文件中添加:

  • CGAL_Core-vc140-mt-gd-4.11.dll
  • CGAL_ImageIO-vc140-mt-gd-4.11.dll
  • CGAL-vc140-mt-gd-4.11.dll

三个.dll的文件,这个要在 D:\compile\cgal\build\lib(编译生成CGAL的库目录)中找到。祝你成功!

  • 4
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值