CGAL+VS+Qt环境配置

最近在搞图形学,配了一下cgal,踩了不少坑,在这里记一下。可以跟着官网来,不过配置可能会稍微有些麻烦。

基本配置

下载cgal包

github找到官网,在release上下载两个包
在这里插入图片描述
在这里插入图片描述
下载结束后解压,把GMP那个包放到CGAL包对应目录下就行(目录:\CGAL-5.4\auxiliary

boost安装

SourceForge上下载对应boost版本就可以(我使用的是VS2022,所以直接下了14.3,对应版本如下)

VSBoost
vs201514.0
vs201714.1
201914.2

在这里插入图片描述
之后一路安装即可

环境变量配置

用户变量:

BOOST_INCLUDEDIR = 你的boost路径\D:\boost_1_79_0

在这里插入图片描述

BOOST_LIBRARYDIR = 你的boost路径\boost_1_79_0\lib64-msvc-14.3

在这里插入图片描述

path:

你的boost路径\boost_1_79_0\lib64-msvc-14.3

在这里插入图片描述

VS配置

  1. 随便创建一个新项目,之后找到属性管理器(可以直接在vs里面搜索)
    在这里插入图片描述
  2. 之后右键添加新项目属性表,创建你的属性表即可。
    在这里插入图片描述
  3. 创建完成后,双击你新创建好的属性表
    1. 添加包含目录
      在这里插入图片描述
      添加以下文件:
      你的CGAL目录\CGAL-5.4\auxiliary\gmp\include
      
      你的CGAL目录\CGAL-5.4\include
      
      你的boost目录\boost_1_79_0
      
      在这里插入图片描述
    2. 添加库目录 (通用属性->VC++ 目录->库目录
      CGAL目录\CGAL-5.4\auxiliary\gmp\lib
      
      boost目录\boost_1_79_0\libs
      
      在这里插入图片描述
      之后将
      CGAL目录\CGAL-5.4\auxiliary\gmp\lib
      
      添加到你的环境变量path中!!(如果不添加,在编译一些项目时会报,找不到libmpfr-4.dll找不到libgmp-10.dll的错误)
    3. 添加依赖项(通用属性->链接器->输入>附加依赖项
      libgmp-10.lib
      
      libmpfr-4.lib
      
      在这里插入图片描述

测试

至此,我们的环境就配置完了,可以跑一跑下面的代码看一看

#include <iostream>
#include <CGAL/Simple_cartesian.h>
typedef CGAL::Simple_cartesian<double> Kernel;
typedef Kernel::Point_2 Point_2;
typedef Kernel::Segment_2 Segment_2;
int main()
{
    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;
}

vs可能会报错:
在这里插入图片描述
这里我们shift+f4打开属性页,在C/C++命令行中加/bigobj即可
在这里插入图片描述
之后再进行测试输出结果:
在这里插入图片描述

图形化配置(可选)

这里我们用这样一段代码进行测试(用以生成一个模型):

#include <CGAL/Exact_predicates_inexact_constructions_kernel.h>
#include <CGAL/Polygon_2.h>
#include <CGAL/Polygon_with_holes_2.h>
#include <CGAL/Polygon_set_2.h>
#include <CGAL/draw_polygon_set_2.h>
typedef CGAL::Exact_predicates_exact_constructions_kernel K;
typedef CGAL::Polygon_2<K>                                Polygon_2;
typedef CGAL::Polygon_with_holes_2<K>                     Polygon_with_holes_2;
typedef CGAL::Polygon_set_2<K>                            Polygon_set_2;
typedef CGAL::Point_2<K>                                  Point_2;
Polygon_2 rectangle(int l)
{
	// Create a rectangle with given side length.
	Polygon_2 P;
	P.push_back(Point_2(-l, -l));
	P.push_back(Point_2(l, -l));
	P.push_back(Point_2(l, l));
	P.push_back(Point_2(-l, l));
	return P;
}
int main()
{
	// Create a large rectangle A, with a hole and a smaller rectangle
	// B inside A's hole.
	Polygon_with_holes_2 A(rectangle(3));
	Polygon_2 H(rectangle(2));
	H.reverse_orientation();
	A.add_hole(H);
	Polygon_2 B(rectangle(1));
	// Add them to a polygon set and draw it.
	Polygon_set_2 S;
	S.insert(A);
	S.insert(B);
	CGAL::draw(S);
	return 0;
}

这里我们可能会出现这个错误:

Impossible to draw, CGAL_USE_BASIC_VIEWER is not defined.

在这里插入图片描述
这里其实就是我们没有配置qt的原因,接下来我们配置一下qt

安装qt

访问官网进行下载。
在这里插入图片描述
下载结束后进行安装即可,注意这里在选择组件时将Qt选项展开,选择与你VS版本相对应的内容,这里我选择的是MSVC 2019 64-bit(VS2022),注意这里的版本是Qt5,不要下错了版本
在这里插入图片描述

添加环境变量

这里在用户变量中添加

QTDIR=QT路径\6.3.0

Path中添加

QT路径\6.3.0\msvc2019_64\bin

创建CMakeLists.txt

找到我们创建的项目目录
在这里插入图片描述
在这里插入图片描述

在该目录下新建一个CMakeLists.txt文件,具体内容如下:

# Created by the script cgal_create_cmake_script
# This is the CMake script for compiling a CGAL application.
cmake_minimum_required(VERSION 3.1...3.20)
#创建项目 这里是你的项目名
project(Project1)

# 导包
find_package(CGAL REQUIRED COMPONENTS Core OPTIONAL_COMPONENTS Qt5)
if(CGAL_Qt5_FOUND)
  add_definitions(-DCGAL_USE_BASIC_VIEWER -DQT_NO_KEYWORDS)
endif()
# 对每个cpp创建一个target
file(
  GLOB cppfiles
  RELATIVE ${CMAKE_CURRENT_SOURCE_DIR}
  ${CMAKE_CURRENT_SOURCE_DIR}/*.cpp)
foreach(cppfile ${cppfiles})
  create_single_source_cgal_program("${cppfile}")
endforeach()

# Qt5配置
if(CGAL_Qt5_FOUND)
  # 连接仓库,第一个参数(main)是我们的目标cpp文件,这里放你的cpp即可
  target_link_libraries (main PUBLIC CGAL::CGAL_Qt5)
  target_link_libraries (main PUBLIC CGAL::CGAL_Basic_viewer)
else()
  message(
    STATUS
      "NOTICE: The example main requires Qt and drawing will be disabled."
  )
endif()

使用cmake搭建项目

source code是我们CMakeLists.txt所在目录,where to build也选择该目录即可
在这里插入图片描述
之后点击configure,不用加别的配置,直接finish即可。之后generate,之后打开项目,就可以看到我们的文件。
在这里插入图片描述直接运行即可,我们最终跑出了下面的结果:
在这里插入图片描述
至此我们cgal的环境算是彻底配完啦!

其他配置的一些错误

vcpkg

如果你使用的是Vcpkg的话,可能在下载cgal时报超时的错,这里不用管它,继续

vcpkg.exe install cgal

就可以(它会继续现在你之前没有下载的包)

cmake

如果你使用了cmake对项目进行构建,可能会提示你找不到一些文件,这里有可能就是你没有下载boost或者没有下载GMP的包,上面我们都讲过了,直接下载包,然后再cmak那里把路径填好就可以
在这里插入图片描述

  • 18
    点赞
  • 37
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值