ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

CGAL在VS2017下的完整配置指南:从Boost到vcpkg一站式搞定

CGAL在VS2017下的完整配置指南:从Boost到vcpkg一站式搞定 1. 为什么CGAL在VS2017里这么难配1.1 CGAL是什么解决什么问题CGAL全称Computational Geometry Algorithms Library也就是计算几何算法库。干这行的人基本都听说过它——如果你要做网格生成、凸包计算、Delaunay三角剖分、多边形布尔运算、最近邻搜索这类几何相关的事CGAL几乎是绕不开的选择。我当年第一次碰CGAL是在做点云处理项目的时候需要把散乱点云做Delaunay三角剖分。自己写能写但稳定性和性能跟CGAL这种积累二十多年的库完全没法比。CGAL背后是欧洲多所顶尖高校和科研机构的数十年迭代里面每一个算法都经过了严格的正确性验证和性能优化。用通俗话讲别人把饭做好端到你面前了你只需要会加热就行——前提是你得先把锅灶搭起来也就是把库配好。但问题恰恰出在配好这一步。1.2 为什么VS2017环境配置比一般的库麻烦如果你只是装OpenCV或者Eigen那基本上一句话就能搞定——下载、解压、配置include和lib路径完事。但CGAL不一样它的依赖链条比较长底层依赖于Boost库精确算术部分依赖于GMP和MPFR两个数论库。这三个依赖任何一个版本不对、位数不对、编译器不一致都会导致一串莫名其妙的编译错误。另外CGAL本身的结构也在发生变化。早期版本必须编译生成一堆静态库或动态库然后在工程里一个个链接到了5.x版本核心算法部分改成了header-only模式但你写工程时依然需要链接一些辅助库而且依赖的管理方式变了。这就导致网上很多教程直接就过时了——照着4.x时期的教程配5.x版本第一步就不对后面步步错。VS2017本身也有特殊性。它的默认工具集是v141很多新版本库的预编译二进制包已经不支持v141了。比如Boost从1.73之后不再单独为VS2017出预编译安装包GMP和MPFR在Windows上又几乎没有官方预编译包用MinGW编译出来的库VS又没法直接链接。种种原因叠加CGAL在VS2017下的配置就成了一块硬骨头。我今天把这几年实际配置过程中踩过的坑、走过的弯路和最终验证可行的完整方案整理成文。方法不唯一但下面的每条路都是我实测跑通过的照着抄就能用。2. 配置前需要准备的三件事2.1 明确版本组合比动手还重要很多人在配置CGAL时翻车根源在于版本组合没选对。VS2017、CGAL、Boost、GMP、MPFR、CMake这六个组件必须形成一条彼此兼容的闭环任何一个版本掉链子都会引发连锁反应。我实测下来几套可行的组合先给各位一个参考组件推荐版本说明Visual Studio201715.9工具集v141必须安装C桌面开发工作负载CMake3.15 ~ 3.21过低识别不了新版本CGAL过高可能生成VS2017不兼容的配置Boost1.71 ~ 1.73这是最后一批提供VS2017预编译商业版的版本区间CGAL5.4 或 5.55.x系列对CMake工程支持较好头文件模式也更友好GMP/MPFR通过vcpkg编译替代手动编译的坑后文详述vcpkg最新稳定版专门用来编GMP和MPFR的便捷方式注意我把Boost卡在1.71~1.73这是有讲究的。从Boost 1.74开始官方预编译包不再提供针对VS2017工具集的exe安装程序。虽然可以通过源码自己编译但一方面编译Boost耗时长另一方面Boost的b2工具在VS2017上的配置还需要一堆参数纯属给自己添堵。CGAL这边5.4和5.5是我实际用过的版本都在VS2017上跑通过。5.6之后对CMake的最低版本要求变高了如果你是老机器上的VS2017建议保守一点。2.2 安装VS2017时最容易被忽略的选项如果你电脑上还没有VS2017安装的时候一定记得勾选使用C的桌面开发这一项。很多人只装了基础的.NET开发或通用Windows平台开发装完才发现根本没有C编译器。在Visual Studio Installer里勾选使用C的桌面开发后右侧的安装详细信息面板里默认会带上MSVC v141编译器和Windows 10 SDK。这两项务必确认勾上了。如果你的Windows版本比较新比如Windows 11可能还会提示需要额外的SDK版本按提示装上就行。另外我建议顺手装上适用于Windows的C CMake工具。这样VS2017可以直接打开CMakeLists.txt工程对后面用CMake构建CGAL很有帮助省得你切来切去用命令行。2.3 下载CGAL源码包去CGAL官网的下载页面找到对应版本的源码包下载后缀名为exe的自解压文件或者zip压缩包。CGAL在Windows下安装其实就是解压到某个目录——比如我习惯放在D:\libs\CGAL-5.5。记住这个路径后面配置环境变量和工程属性都要用到。解压后的目录结构长这样D:\libs\CGAL-5.5 ├── include/ # CGAL头文件所在目录 ├── lib/ # 编译后生成的库文件 ├── auxillary/ # 依赖库辅助脚本 ├── cmake/ # CMake模块 ├── scripts/ # 构建脚本 └── demo/ # 官方示例需要特别提一嘴的是include目录。早期版本的CGAL把所有头文件放在include/CGAL下5.x版本引入了更多模块化结构include下有几个子目录比如CGAL、CGAL/boost等。在VS里配置包含目录时指向include这一层即可编译器会自动递归搜索。3. 依赖库安装Boost、GMP和MPFR3.1 配置Boost的两种思路各有取舍Boost是CGAL最基础也是最重要的依赖。CGAL里的智能指针、几何对象内存管理、图结构等底层设施都基于Boost实现。Boost装不好CGAL编译时会把几百个错误砸到你脸上而且看起来都是莫名其妙的那种。理论上Boost有两条路可以走——源码编译和预编译包安装。如果你选择预编译包直接去Boost官网的历史版本下载区找1.72或1.73版本选择boost_1_73_0-msvc-14.1-64.exe这样的文件。注意文件名里的msvc-14.1对应的就是VS2017的编译器版本VS2015是14.0VS2017是14.1VS2019是14.264对应64位架构。千万不要下错成32位的否则后面链接时直接报LNK1112错误说的是模块计算机类型与目标计算机类型冲突。下载后是个自解压安装程序会有图形化向导。请务必选自定义安装然后只勾选你需要用到的库。CGAL实际用到的Boost组件包括date_time、thread、system、serialization、iostream等。全量安装也行就是占地方而且后面如果你要在VS里链接库靠lib文件命名去匹配会很吃力。如果是源码编译用管理员身份打开适用于VS2017的x64本机工具命令提示符然后执行cd D:\libs\boost_1_73_0 bootstrap.bat .\b2 --build-dirbuild\x64 address-model64 --with-thread --with-system --with-date_time --with-serialization toolsetmsvc-14.1 variantrelease,debug linkstatic runtime-linkstatic我这么说可能有点夸张但source编译Boost在时间上真的很考验耐心。release和debug两个variant编下来在一般配置的电脑上二三十分钟是少不了的。除非你对Boost的编译选项有定制需求比如需要静态链接运行时库否则直接上预编译包是最合理的路径。需要说明的是不管哪种方式装完后Boost的目录结构都是这样C:\local\boost_1_73_0 ├── boost/ # 头文件目录注意这一层才是boost子目录所在 ├── lib64-msvc-14.1/ # 64位二进制库文件 ├── lib32-msvc-14.1/ # 如果你装了32位库 └── boost.css3.2 GMP和MPFR为什么CGAL离不开它们如果说Boost是CGAL的骨架那GMP和MPFR就是CGAL的灵魂。这两个库解决的是计算几何里最核心的问题——精确算术。我稍微展开讲一下这里涉及一个很多人问过的疑问为什么CGAL不能只用double来算因为在大规模几何计算中浮点数的误差是致命的。举个例子判断一个点是在直线的左侧还是右侧在理论上这是一个简单的叉积符号判断。但如果这个点距离直线非常近double的浮点误差可能导致结果正负反转——这在几何算法里意味着完全不同的拓扑结构比如Delaunay三角剖分会因为一个符号翻转而变得自相矛盾。CGAL的解决方案是内核Kernel机制。你用Exact_predicates_inexact_constructions_kernel这个内核时谓词计算比如判断点在平面哪一侧使用GMP的任意精度整数运算保证结果绝对精确。这样做让几何算法的正确性有了数学上的保证。GMPGNU Multiple Precision Arithmetic Library是任意精度大数运算库MPFR则是在GMP基础上提供的多精度浮点运算库。这两个库在Linux上是包管理器一键安装的事儿但在Windows上比较尴尬——官方不提供预编译的VS可用版本。手动编译GMP在Windows上需要用MinGW或MSYS2环境编出来的库文件和VS的链接格式还经常对不上。真的这条路我试过走到一半就放弃了。后来我用的是vcpkg方案省时省力下面直接给步骤。3.3 vcpkg一击装好GMP和MPFRvcpkg是微软推出的C包管理器它在Windows下的体验比Linux的apt要轻量而且能直接集成到VS工程属性里。第一步克隆vcpkg仓库并编译git clone https://github.com/microsoft/vcpkg cd vcpkg bootstrap-vcpkg.bat第二步安装GMP和MPFR。注意这里的架构参数必须和你VS工程的目标平台一致我们这里用x64.\vcpkg install gmp:x64-windows mpfr:x64-windows这个过程会从源码编译GMP和MPFR耗时取决于机器配置一般来说五到十五分钟。编译完成后vcpkg会输出类似这样的信息The package gmp:x64-windows provides CMake targets: find_package(GMP CONFIG REQUIRED) target_link_libraries(main PRIVATE GMP::gmp)第三步让VS能找到这些库。vcpkg支持全局集成.\vcpkg integrate install执行成功后VS2017所有C工程会自动附加vcpkg的include和lib路径。这意味着你在工程里写的#include gmpxx.h和链接gmp.lib都会自动生效。如果你不想全局集成也可以只集成到单个工程VS里右键项目选择属性然后在Vcpkg一栏里把使用Vcpkg选项改为是。不过我建议还是全局集成因为后面可能出现多个工程都用到CGAL的情况全局一次搞定方便些。有读者可能问GMP和MPFR的库文件在哪vcpkg安装后的文件都统一放在你的vcpkg目录\installed\x64-windows下包括include、lib和bin三个子目录。如果你后续要手动配工程属性而不是靠vcpkg自动集成也是去这个目录里找头文件和库文件。4. 编译CGAL源码两种路径任你选4.1 路径一用vcpkg一键安装CGAL适合快速上手如果你只是想在工程里用CGAL并不打算改CGAL源码或做二次开发那么最快捷的路是直接让vcpkg帮你把CGAL装好.\vcpkg install cgal:x64-windows这条命令会自动拉取CGAL源码、编译并安装同时把之前装的Boost、GMP、MPFR依赖一起处理好。整个过程大概需要半小时到一个小时时间长短取决于机器性能。优点非常明显依赖关系全部自动解决编译选项也不需要自己操心装完即用。缺点则是你没法自定义CGAL的编译选项比如你想要Release和Debug都编译、或者想开启CGAL_ENABLE_EXAMPLES来编译官方示例vcpkg默认就帮不了那么细致。而且vcpkg编译的CGAL默认不带上CGAL的文档和示例你学习和测试的时候就少了便利。所以我个人对vcpkg路径的评价是适合对CGAL已经有了解、只想赶紧搭好环境的老手新手我依然推荐走下面的源码编译路径因为你能更清楚地看到每一步配置究竟在干什么。4.2 路径二CMake源码编译更清楚也更可控CGAL 5.x版本本身就提供了完整的CMake构建脚本用CMake生成VS工程再在VS里编译全程可视化配置过程也比较直观。先把CMake装好。从CMake官网下载Windows x64安装包安装时勾选将CMake添加到系统PATH这一项。装完在命令行输入cmake --version确认版本号。接下来打开CMake GUI。点Browse Source选择CGAL源码目录也就是解压出来的D:\libs\CGAL-5.5。点Browse Build设置一个专门的构建目录建议不要放在源码目录里面我放在D:\libs\CGAL-5.5-build这样源码和编译产物分离后期想删构建目录重来也方便。第一次Configure的时候弹出的对话框会要求你选生成器。这里选择Visual Studio 15 2017 Win64——注意不要漏掉Win64否则生成的是32位工程。平台工具集会默认选v141保持默认即可。Configure跑完如果不出意外CMake界面上会列出各种可配置项。挑几个关键的说明一下CMAKE_CONFIGURATION_TYPES默认是Debug;Release;RelWithDebInfo;MinSizeRel全部保留后面你可以选择编译哪些配置。CGAL_ENABLE_EXAMPLES建议勾选这样编译完会得到官方示例的exe可以用来验证环境是否正常。CGAL_ENABLE_TESTING测试集耗时较长新手初期可以不勾。CGAL_HEADER_ONLY5.x版本默认情况下就是header-only核心模式不用改。Configure成功后再点GenerateCMake就会在构建目录里生成CGAL.sln解决方案文件。用VS2017打开这个sln在解决方案管理器里右键ALL_BUILD项目选择生成。CGAL库文件就会被编译输出到构建目录下的lib文件夹里。这里强调一个细节Debug和Release两个配置最好都编译一遍。原因很简单你在VS里写工程时Debug模式链Debug版的CGAL库Release模式链Release版的如果只编译了其中一个另一个模式链接时会直接报找不到库文件。编译速度取决于机器全量编译CGAL核心加示例大概二十分钟到四十分钟左右。4.3 编译过程中的典型会话输出解读编译CGAL的时候控制台的输出信息量非常大新手很容易看得一头雾水。我把几行典型输出贴出来讲一下7------ Build started: Project: ALL_BUILD, Configuration: Debug x64 ------ 7CGAL.vcxproj - D:\libs\CGAL-5.5-build\lib\Debug\CGAL-vc141-mt-gd-5.5.lib 7example_convex_hull_2.vcxproj - D:\libs\CGAL-5.5-build\bin\Debug\example_convex_hull_2.exe第一行说明正在以Debug模式和x64平台生成。第二行是关键——CGAL-vc141-mt-gd-5.5.lib这个文件名里有很多信息vc141表示这个库是用VS2017编译器编译的mt表示运行时库是多线程版本对应/MD或/MT选项gd表示这是一个Debug版本库5.5对应CGAL版本号5.5。Release版本对应的库名就没有gd叫CGAL-vc141-mt-5.5.lib。后面你在VS工程里配置链接器输入时这两个名字要区分清楚。第三行输出表明示例工程也编译成功。如果编译过程中出现红色错误别慌往下看第六章的排查记录。5. VS2017工程配置从零到一跑通第一个CGAL程序5.1 新建工程并设置项目属性先在VS2017里新建一个空项目语言选C项目名称自定比如CGALTest。解决方案平台建议设为x64因为前面所有依赖库都是64位的。右键项目打开属性页。下面每一步都按照我列的顺序去配不要跳步。第一步确认平台工具集是v141。在配置属性 - 常规 - 平台工具集里选择Visual Studio 2017 (v141)。如果你电脑上装了多个版本的VS这里可能会默认选更高的版本务必改回v141。第二步设置VC目录。这里的设置分Release和Debug两种情况但其实包含目录和库目录的路径是通用的不需要分别设置。在VC目录这一栏包含目录追加D:\libs\CGAL-5.5\include C:\local\boost_1_73_0Boost路径按你的安装位置调整 GMP和MPFR头文件路径如果你用了vcpkg全局集成系统会自动加不用手填。库目录追加D:\libs\CGAL-5.5-build\lib\Debug D:\libs\CGAL-5.5-build\lib\Release C:\local\boost_1_73_0\lib64-msvc-14.1Debug和Release都写进去这样不管你在VS里切到哪个配置都能找到对应库。第三步在C/C - 语言 - C语言标准里选择ISO C17标准(/std:c17)。CGAL 5.x的代码用了不少C17特性默认的C14标准也能编但开C17可以避免一些坑而且现在新代码普遍用C17一步到位省心。第四步设置运行库。在C/C - 代码生成 - 运行库这一项Debug配置选多线程调试DLL(/MDd)Release配置选多线程DLL(/MD)。这里需要和CGAL库编译时用的选项保持一致否则会触发LNK2038错误那个错很烦。5.2 配置链接器的附加依赖项这一步决定程序能链接到哪些库文件。在链接器 - 输入 - 附加依赖项里按配置分别填写。Debug配置下添加CGAL-vc141-mt-gd-5.5.lib gmp-vc141-mt-gd.lib mpfr-vc141-mt-gd.lib boost_system-vc141-mt-gd-1_73.lib boost_thread-vc141-mt-gd-1_73.lib boost_date_time-vc141-mt-gd-1_73.lib boost_serialization-vc141-mt-gd-1_73.libRelease配置下添加CGAL-vc141-mt-5.5.lib gmp-vc141-mt.lib mpfr-vc141-mt.lib boost_system-vc141-mt-1_73.lib boost_thread-vc141-mt-1_73.lib boost_date_time-vc141-mt-1_73.lib boost_serialization-vc141-mt-1_73.lib有两点我特意强调一下。一是GMP和MPFR的库文件名在手动编译CGAL时可能不叫这个。如果你用的是vcpkg编译的GMP/MPFR实际的库名叫gmp.lib和mpfr.lib没有版本信息后缀。所以上表里的gmp和mpfr部分按你实际生成的库文件来可以去vcpkg的installed\x64-windows\lib目录里看一眼文件名再填。二是Boost库的文件名非常讲究。命名规则是boost_模块名-编译器-线程-版本-编译配置-主版本号_次版本号.lib。其中-gd-表示Debug版本Release没有gd。如果你的Boost是预编译包安装的只需按照实际目录里的文件名抄进去就行。如果链接时提示找不到某个lib最简单的处理办法是打开该lib所在目录搜索一下真实文件名然后回来修正附加依赖项里的名字。这个办法虽然笨但非常有效。5.3 DLL运行时的三种处理方式CGAL、GMP、MPFR库在Windows下都是动态链接方式。这意味着编译链接成功后运行时系统还需要找到对应的dll文件否则程序一跑起来就会弹找不到CGAL-vc141-mt-5.5.dll之类的高错误对话框。有三种处理方式挑一种你喜欢的第一种把需要的dll文件复制到exe所在目录。CGAL构建目录下的bin\Debug和bin\Release里有CGAL-vc141-mt-gd-5.5.dll、CGAL-vc141-mt-5.5.dll等GMP和MPFR的dll在vcpkg的installed\x64-windows\bin里。全部复制过来最省事也最可靠。第二种把dll所在目录加入系统PATH环境变量。这样任何工程都能找到但如果你不同版本混着用可能出现版本冲突我不太推荐。第三种在VS工程属性里设置调试环境。在调试 - 环境里写PATH$(SolutionDir)bin;$(PATH)配合生成后事件自动复制dll。这个方案稍微复杂但自动化程度高适合项目趋于稳定后一劳永逸。我个人的建议是直接用第一种简单直接不给自己留坑。5.4 写一个Hello CGAL程序验证环境环境配置完毕现在写一段代码验证是否一切正常。从最经典的计算几何入门问题——二维点集的凸包开始。新建一个cpp文件粘贴如下代码#include iostream #include vector #include CGAL/Exact_predicates_inexact_constructions_kernel.h #include CGAL/convex_hull_2.h typedef CGAL::Exact_predicates_inexact_constructions_kernel K; typedef K::Point_2 Point_2; int main() { // 构建一组随机二维点 std::vectorPoint_2 points { Point_2(0, 0), Point_2(1, 0), Point_2(0, 1), Point_2(1, 1), Point_2(0.5, 0.5), Point_2(0.2, 0.8), Point_2(0.8, 0.2) }; std::vectorPoint_2 result; // 计算凸包 CGAL::convex_hull_2(points.begin(), points.end(), std::back_inserter(result)); std::cout 凸包顶点数: result.size() std::endl; for (const auto p : result) { std::cout ( p.x() , p.y() ) std::endl; } return 0; }代码逻辑本身不复杂创建了7个二维点调用CGAL的convex_hull_2函数计算凸包输出凸包顶点坐标。关键在第一行#include CGAL/Exact_predicates_inexact_constructions_kernel.h这个内核保证了点位置判断的精确性是CGAL的核心特性之一。编译运行后正确输出应该是凸包顶点数: 4 (0, 0) (1, 0) (1, 1) (0, 1)凸包顶点顺序可能因算法内部排序而略有不同但顶点集合一定是这4个点如果这个程序能顺利编译、链接、运行并输出正确结果恭喜你你的CGAL环境已经是可用的了。如果中途报错页面转到第六章对照排查。6. 常见错误与排查实录6.1 高频错误速查表我在配置CGAL的过程中以及在帮同事排查问题时遇到了不少重复出现的错误。我把它们整理成一个速查表方便你直接对照排查。错误现象可能原因解决方法找不到CGAL-vc141-mt-5.5.lib库目录路径错误或 CGAL 只编译了 Debug/Release 其中一个检查链接器库目录确保 Debug 和 Release 库都存在LNK2038: _ITERATOR_DEBUG_LEVEL不匹配运行时库设置不一致/MT 与 /MD 混用统一设置为/MDdDebug和/MDReleaseLNK1112: 模块计算机类型 x86 与目标计算机类型 x64混用了 32 位和 64 位库所有依赖库必须统一为 x64检查链接器目录是否指到 x86 的库编译代码时一堆error C2039: XXX is not a member of stdBoost 或 CGAL 版本与编译器不兼容确认 Boost 是 1.71~1.73 且 msvc-14.1 版本CGAL 用 5.4/5.5运行时提示找不到gmp.dll/mpfr.dllDLL 不在 exe 目录或 PATH将 DLL 复制到 exe 所在目录error C2065: Gmpz : undeclared identifier没有正确包含 GMP 头文件或链接 GMP 库检查 vcpkg 集成是否生效确认#include CGAL/gmpxx.h存在CMake 配置时找不到 BoostBoost 路径未设置正确在 CGAL 构建时指定-DBOOST_ROOTC:\local\boost_1_73_0运行凸包程序输出结果不对内核选择不精确或浮点误差影响使用Exact_predicates_inexact_constructions_kernel必要时换全精确内核6.2 我踩得最狠的坑Boost预编译包位数选错那一次帮同事配置因为同事机器上原本装过VS2015Boost安装的时候没注意选位数装成了32位的lib32-msvc-14.1目录。结果编译CGAL时CMake阶段一直很正常但一旦进入VS编译环节就冒出一大堆LNK1112错误和LNK2038错误混合在一起光看错误信息很难判断到底是哪个库出了问题。排查过程很折腾。后来我是在链接器的高级设置里开启了显示进度选项让编译器把正在搜索的库路径输出出来才发现搜索的Boost库目录是lib32-msvc-14.1这才定位到问题根源。解决方式也简单重新安装64位的Boost预编译包然后清理CMake构建目录重新Configure。这里提醒一句CMake的缓存很顽固如果依赖路径变了务必删掉整个build目录重新来否则旧的缓存路径会继续干扰。6.3 容易犯迷糊的Debug与Release库名区分好多初学者在写附加依赖项时会在Debug配置里不小心写成了Release库名或者反过来。这里的表现比较迷惑——编译阶段完全不报错但链接阶段会报LNK1104: 无法打开文件CGAL-vc141-mt-5.5.lib。原因在于你在Debug配置下链接Release库而Release库文件存在于库目录中因为我们之前把Debug和Release两个目录都加进去了但编译器报错说打不开文件说明它找到的库目录里没有对应文件。其实它是在Release目录里找CGAL-vc141-mt-gd-5.5.lib自然找不到。解决办法很简单Debug配置只填带gd的库名Release配置只填不带gd的库名逐一核对即可。另外我还碰到过一个奇怪的问题Debug下编译通过但运行时程序崩溃通过断点调试发现数据错乱。最后查明原因是链接器选项里Debug配置仍然链接了Release版的Boost库。Boost的Debug和Release版本内部内存布局有差异混用会导致不可预期的行为。这个坑非常隐蔽连编译器都检测不出来只能靠运行时崩溃排查。所以务必确保所有库的Debug/Release属性都保持一致。7. 最后再分享几个实用小技巧7.1 用CMake直接管理你的CGAL工程虽然这篇博文主要讲的是在VS2017里手动配置工程属性但如果你打算长期跟CGAL打交道我强烈建议你学会直接用CMake管理自己的工程。CGAL官方提供了完善的CMake集成它能在配置阶段自动找到所有依赖库你不需要手动填一堆include和lib路径。给一个最小CMakeLists.txt范例cmake_minimum_required(VERSION 3.15) project(CGALTest) set(CMAKE_CXX_STANDARD 17) set(CMAKE_CXX_STANDARD_REQUIRED ON) find_package(CGAL REQUIRED) add_executable(CGALTest main.cpp) target_link_libraries(CGALTest CGAL::CGAL)有了这个文件你只需要在CMake GUI里配置一次CGAL_DIR指向CGAL源码目录生成VS工程后所有的头文件路径、库路径、链接库名都自动搞定。这比手动配置工程属性省心太多也适用于团队协作——每个人拉下来代码后不用各自配环境CMake统一处理。7.2 在配置里提前规划好后期往VS2019迁移CGAL工程的可移植性其实做得很好。如果你现在用的是VS2017未来有升级到VS2019或VS2022的计划建议从一开始就把CGAL的库文件放在一个独立的目录集中管理比如我放在D:\libs下面这个目录下每个库都有自己的子目录。这样升级时只需要重新编译依赖库或者下载对应新版本的预编译包再更新VS工程里的路径即可不必改动任何业务代码。我实测过从VS2017迁移到VS2019的流程把CGAL和相关依赖库换成用vc142编译的版本把平台工具集从v141改成v142工程配置里的库目录路径更新一下就行。代码零改动就完成了迁移。这份提前规划能让你后面省下很多重复劳动的工夫。7.3 环境验证是个好习惯最后说一个我个人的习惯每次配完环境我都会运行一个包含多种geometry操作的验证程序而不仅仅是跑凸包。判断点是否在多边形内部、对一组线段做求交、构造Delaunay三角剖分这些基础操作各写一个小函数跑一遍。如果它们输出都正确说明CGAL的核心算法链路完全健康可以用来做正事了。检查的时间很短但能提前发现隐藏的版本兼容问题比我写了几百行业务代码之后才发现环境不对要好太多。配置CGAL确实是件磨人的事但一旦你走完整个流程你会对C项目的依赖管理、库文件命名规范、链接器工作机制都有更深入的理解。这套技能不仅仅是针对CGAL的任何大型C库的配置思路都是相通的。
返回列表