总结安装 CGAL 的步骤和错误解决方法。
Windows 中安装 CGAL
官方安装流程:https://doc.cgal.org/5.1.2/Manual/windows.html
Windows 中 CGAL 提供了 cgal-version-setup.exe 安装程序,直接安装即可。不过要首先安装 Boost 和 Qt5 这两个依赖库,其余的依赖库会在 CGAL 安装时附带自动装上。
安装 Boost
Windows 中也提供了 exe 安装程序。下载任意版本安装即可,例如 1.71.0。安装后建议添加几个路径到环境变量中:
BOOST_LIBRARYDIR = C:\dev\libboost_1_71_0\lib64-msvc-14.2
BOOST_INCLUDEDIR = C:\dev\libboost_1_71_0
并把相应的 bin 路径添加到系统的 Path 中:
C:\dev\libboost_1_71_0\lib64-msvc-14.2
注:这个 lib64-msvc-14.2 对应的其实就是 Visual Studio 2019 版本(MSVC 编译器版本和 Visual Studio 版本对照可参考:https://en.wikipedia.org/wiki/Microsoft_Visual_C%2B%2B)。
安装 Qt 5
中文说明:https://blog.csdn.net/u012670181/article/details/105600202?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromBaidu-1.control&depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromBaidu-1.control
以 Qt5.14.2 为例,下载安装程序后,安装到默认路径。安装时,只选择几个和 MSVC 相关的选项即可,例如 MSVC 15, 17 (x86, x64) 以及 MingGW (可选),其余不用装。
安装后,同样建议设置相关路径:
QTDIR=C:\dev\Qt\Qt5.14.2
并把如下路径添加到系统的 Path 中:
C:\dev\Qt\Qt5.14.2\msvc2017_64\bin
从 CGAL 5.0 开始 CGAL 是 header-only 的了。不过还是可以编译 CGAL 并且用以前的老方法在 CMakeLists 中使用。
在 Visual Studio 2019 中添加 Qt-tool
参考这个文档:https://www.jianshu.com/p/1db7fbe407f8
Linux 中安装 CGAL
安装老版本 CGAL 4.11
CGAL 4.11 Manual: https://doc.cgal.org/4.11/Manual/tutorials.html
在 Ubuntu 下最简单的安装方法是:
sudo apt-get install libcgal-dev
不过在 Ubuntu 16/18 中,你还需要安装 CGAL-Qt 包:
sudo apt-get install libcgal-qt5-dev
sudo apt-get install libqt5svg5-dev
其中第二个包是为了解决这里列出的一个有关 qt 的问题:https://stackoverflow.com/questions/54352145/how-do-you-install-cgal-with-qt5-on-ubuntu-1804
注意:经在 Ubuntu 18.04 中测试,这种安装方法只能安装 CGAL 4.11 版本,这版本实在有点老。
安装新版本 CGAL 5.1.1
参考:https://doc.cgal.org/latest/Manual/installation.html
首先安装依赖库:
sudo apt-get install libboost-all-dev libcgal-qt5-dev libqt5svg5-dev
有时候可能还需要 gmp 等几个特别的库,不过你的系统很可能已经安装过了。
然后,从 CGAL repo 下载 CGAL-5.1.1.zip 源码。接着用下面方法编译 CGAL 以及一个例子:
cd $HOME/CGAL-5.1.1
mkdir build
cd build
cmake -DCGAL_HEADER_ONLY=OFF -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALLED_PREFIX=../install ..
make
make install
# Build some example
cd examples/Triangulation_2
mkdir build && cd build
cmake -DCGAL_DIR=$CMAKE_INSTALLED_PREFIX/lib/CGAL -DCMAKE_BUILD_TYPE=Release ..
make
注意:
- 如果编译例子时遇到了错误(笔者在 Ubuntu 18 中遇到了),那么将 CGAL_DIR 修改为 CGAL-5.1.1.zip 解压后的根目录,即
$HOME/CGAL-5.1.1
,而不是上面的$CMAKE_INSTALLED_PREFIX/lib/CGAL
。不过,不同系统下,后者这个路径有时候是对的,有时候不对,还不清楚为什么。
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。
和 Ubuntu Linux 相比,Mac 比较烦的是 Qt5 的安装和配置。
Prerequisites
- cmake
- boost
- qt5
-
libqglviewer
- gmp
- mpfr
上面除了 cmake 外,剩下的安装方法全部是 brew install XXX
。最后两个库是 CGAL 依赖的 floating 库,无脑安装即可。cmake 的话虽然也可以用 brew install
,但是不包含 cmake-GUI。如果要顺带安装 cmake-GUI,使用 brew cask install cmake
。
NOTE:新版本的 CGAL 中似乎不需要安装 libqglviewer 了(而且它也没办法通过 brew install 安装了)。
有关 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 中已经给出了。
#