Mac 安装 CGAL 5.0.2 with Qt5

2020/04/14 Library

总结 Mac 中安装 CGAL 的步骤和错误解决方法。


首先,直接按照CGAL官网上所示的 brew install cgal 是可以安装最新版本的 CGAL 的(笔者显示的是 CGAL 5.0.2 版本),不过它并不包含和 Qt5 相关的部分。即,用户无法编译和渲染相关的所有代码。经过检查,brew 安装的 CGAL 确实不包含 Qt5 的部分。虽然官网上给出可以接着使用 brew install cgal-qt5安装 Qt5 相关的部分,但是笔者亲测失败了,显示根本找不到 cgal-qt5 。本文档主要介绍的是从源码安装 CGAL 5.0.2。

Prerequisites

  • cmake
  • boost
  • qt5
  • libqglviewer

  • gmp
  • mpfr

上面除了 cmake 外,剩下的安装方法全部是 brew install XXX。最后两个库是 CGAL 依赖的 floating 库,无脑安装即可。cmake 的话虽然也可以用 brew install,但是不包含 cmake-GUI。如果要顺带安装 cmake-GUI,使用 brew cask install cmake

有关 Qt5 的设置

参考:https://3d.bk.tudelft.nl/ken/en/2016/05/18/configuring-cgal-with-qt5-and-qglviewer-on-mac.html

注意,安装 Qt5 后,需要再链接一下 Qt5 安装路径到常规路径 /usr/local。这是因为 Qt5 在 Mac 中通常默认安装在 /usr/local/Cellar/qt5 这种路径下,经常显示找不到。使用如下几个命令重新链接一下即可:

brew link --force qt5
sudo ln -s /usr/local/Cellar/qt/5.14.1/mkspecs /usr/local/mkspecs
sudo ln -s /usr/local/Cellar/qt/5.14.1/plugins /usr/local/plugins

如果不这么做,接下来的编译过程中会遇到错误,总结在下文中。

安装 CGAL

CGAL官网下载 CGAL-5.0.2.tar.xz 文件,使用 tar xf CGAL-5.0.2.tar.xz解压后,前进到 CGAL-5.0.2 路径下。然后,直接cmake . 然后 make install即可。头文件默认会安装到 /usr/local/include/CGAL,库文件和 cmake 相关文件会安装到 /usr/local/lib/cmake中。

如果需要,也可以下载 CGAL examples 使用。

在你的工程中使用 CGAL

可以参考官方的 wiki 说明:https://github.com/CGAL/cgal/wiki/How-to-use-CGAL-with-CMake-or-your-own-build-system,也可以查看任意一个 CGAL-examples 中的 CMakeLists.txt 的例子。

只使用不包含 Qt5 的 CGAL 很容易,类似这样即可:

find_package(CGAL)
add_executable(my_executable my_source_file.cpp)
target_link_libraries(my_executable CGAL::CGAL)

需要不同的 components 的话就加上:

find_package(CGAL REQUIRED COMPONENTS Core)
target_link_libraries(my_executable CGAL::CGAL CGAL::CGAL_Core)

使用 Qt5 的话则要多几个地方。下面是一个完整的 CMakeLists.txt的例子:

cmake_minimum_required(VERSION 3.1)
project(test_cgal)
#CGAL_Qt5 is needed for the drawing and CGAL_Core is needed for this special Kernel.
find_package(CGAL REQUIRED COMPONENTS Qt5 Core)
if(CGAL_FOUND AND CGAL_Qt5_FOUND)
  #required to use basic_viewer
  add_definitions(-DCGAL_USE_BASIC_VIEWER -DQT_NO_KEYWORDS)
  #create the executable of the application
  add_executable(test_ test.cpp)
  #link it with the required CGAL libraries
  target_link_libraries(test_cgal CGAL::CGAL CGAL::CGAL_Qt5 CGAL::CGAL_Core)
else()
  message("ERROR: this program requires CGAL and CGAL_Qt5 and will not be compiled.")
endif()

测试用的 test.cpp

#include <CGAL/Exact_predicates_exact_constructions_kernel_with_sqrt.h>
#include <CGAL/Surface_mesh.h>
#include <CGAL/boost/graph/helpers.h>
#include <CGAL/draw_surface_mesh.h>

typedef CGAL::Exact_predicates_exact_constructions_kernel_with_sqrt K;
typedef K::Point_3 Point;
typedef CGAL::Surface_mesh<Point> Mesh;

int main()
{
  Mesh m;
  CGAL::make_icosahedron<Mesh, Point>(m);
  CGAL::draw(m);
  return 0;
}

错误汇总

参考:https://github.com/Homebrew/legacy-homebrew/issues/29938

可能会遇到如下所示的 Qt5 的错误:

CMake Error at /usr/local/lib/cmake/Qt5Core/Qt5CoreConfig.cmake:15 (message):
  The imported target "Qt5::Core" references the file

     "/usr/local/.//mkspecs/macx-clang"

这是因为 Qt5 安装后,部分文件路径的链接出现了问题。解决方法在上面安装Prerequisites 中已经给出了。

Search

    Table of Contents