诸多经验贴都建议参考CGAL官方网站的步骤一步一步配置,因为我懒得看英文所以找的都是中文博客和问答,结果走了不少弯路,这里开一篇经验贴,记录错误也方便以后的查阅。本文是基于VS2017的配置和使用。这里是CGAL的使用手册
下载地址
我这下载的是boost_1_68_0.7z,直接解压即可
(1)建议用管理员权限打开cmd;或开始目录vs2017里的“适用于 VS 2017 的 x86_x64 兼容工具命令提示”
(2)用命令进入boost根目录,或者根目录下面的booststrap.bat文件直接拖到cmd打开的界面并回车,运行结束后会产生b2.exe和bjam.exe,这里b2.exe是bjam.exe的新版本;(有的下载的是一个打包好的boost.exe,那么运行这个exe,在其安装目录下可以找到booststrap.bat文件;有的下载下来不是exe,那么解压下载的boost应该就能直接看到booststrap.bat文件
(3)运行b2.exe;
(4)编译完成。
但是按照以上步骤编译完的库太大,许多功能用不上,而且编译时间较长,我们这里建议下载已经编译好的库,或者只编译我们所需要的内容
b2 stage --toolset=msvc-14.1 --with-thread --stagedir="D:\mySDK\boost_1_68_0\lib" link=shared runtime-link=shared threading=multi debug release
b2 stage --toolset=msvc-14.1 --with-thread --stagedir="D:\mySDK\boost_1_68_0\lib" link=static runtime-link=static threading=multi debug release
不管静态库还是动态库这里我都编译了,谨防之后的的错误,结果防不胜防…
重点关注【runtime-link=X】 X的取值是share和static,前者指定生成动态lib,后者则是生成静态lib。
X = static 时 vs项目属性 → C/C++ →代码生成 → 运行库 【多线程调试(/MTd)】
X = share 时 vs项目属性 → C/C++ →代码生成 → 运行库 【多线程调试 DLL (/MDd)】
然后include根目录,link你的目标lib目录,千万确保正确,运行例子程序
#include
#include
void trd_fun()
{
std::cout << "test" << std::endl;
}
int main()
{
boost::thread td(trd_fun);
td.join();
system("pause");
return 0;
}
之后发现依旧报错,说缺少datetime的lib,所以再次编译一遍
b2 stage --toolset=msvc-14.1 --with-date_time --stagedir="D:\mySDK\boost_1_68_0\lib" link=shared runtime-link=shared threading=multi debug release
b2 stage --toolset=msvc-14.1 --with-date_time --stagedir="D:\mySDK\boost_1_68_0\lib" link=static runtime-link=static threading=multi debug release
成功解决问题
Win32平台
libboost_filesystem-vc80-mt-sgdp-1_40.lib
Linux平台
libboost_filesystem.so.1.40.0
libboost_filesystem.a
命名规则:
前缀:lib,但在Win32平台,只有静态库有lib前缀
库名称:以boost_开头的库名称,例子中为boost_filesystem
编译器标识:编译该库文件的编译器名称和版本,例子为-vc80
多线程标识:若支持多线程,则使用-mt;否则,不出现多线程标识
ABI标识:标识Boost库的几个编译链接选项
s:static,静态库标识
gd:debug版标识
p:使用STLpor而不是编译器自带的STL
版本号:Boost的版本号,例子为1_40
扩展名:win32平台为.lib,Linux平台为.a或.so
下载地址
我这下载的是qt-opensource-windows-x86-5.12.0.exe
对于咱们的需求安装这篇博客不错,基本上没遇到什么问题
下载地址
我这下载的是cmake-3.15.0-rc2-win64-x64.msi
说到CMake真是一把辛酸泪了,编译通不过有一部分就是他的原因,首先尽量选择最新的版本,否则它找不到boost。不要管它的提示什么BOOST_INCLUDE_DIR 没有设好,你确定自己的环境变量没有错而又使用的是最新的boost,那么很有可能是CMake没有及时更新,没有识别出你的版本。也就是在编译CGAL的时候FindBoost.cmake里没有最新boost版本,CMake编译不了
有方法说在老版本FindBoost.cmake文件里增加"1.68.0" ,反正我是没有成功
#这是新版的列表
# The user has not requested an exact version. Among known
# versions, find those that are acceptable to the user request.
#
# Note: When adding a new Boost release, also update the dependency
# information in _Boost_COMPONENT_DEPENDENCIES and
# _Boost_COMPONENT_HEADERS. See the instructions at the top of
# _Boost_COMPONENT_DEPENDENCIES.
set(_Boost_KNOWN_VERSIONS ${Boost_ADDITIONAL_VERSIONS}
"1.70.0" "1.70" "1.69.0" "1.69"
"1.68.0" "1.68" "1.67.0" "1.67" "1.66.0" "1.66" "1.65.1" "1.65.0" "1.65"
"1.64.0" "1.64" "1.63.0" "1.63" "1.62.0" "1.62" "1.61.0" "1.61" "1.60.0" "1.60"
"1.59.0" "1.59" "1.58.0" "1.58" "1.57.0" "1.57" "1.56.0" "1.56" "1.55.0" "1.55"
"1.54.0" "1.54" "1.53.0" "1.53" "1.52.0" "1.52" "1.51.0" "1.51"
"1.50.0" "1.50" "1.49.0" "1.49" "1.48.0" "1.48" "1.47.0" "1.47" "1.46.1"
"1.46.0" "1.46" "1.45.0" "1.45" "1.44.0" "1.44" "1.43.0" "1.43" "1.42.0" "1.42"
"1.41.0" "1.41" "1.40.0" "1.40" "1.39.0" "1.39" "1.38.0" "1.38" "1.37.0" "1.37"
"1.36.1" "1.36.0" "1.36" "1.35.1" "1.35.0" "1.35" "1.34.1" "1.34.0"
"1.34" "1.33.1" "1.33.0" "1.33")
下载地址
我这下载的是CGAL-4.13.1-Setup.exe
(1)下载完以后完成安装,注意环境变量里有没有CGAL_DIR,值为CGAL根目录
(2)之后,在CMake里找到CGAL的根目录,然后设置目标build的目录,这个不多说
(3)记得在用户变量下给boost增加环境变量
BOOST_INCLUDEDIR:boost根目录
BOOST_LIBRARYDIR:自己编译生成的boost的lib目录,不是原本的libs目录!
Path:里面添加BOOST_LIBRARYDIR的路径,Qt的路径
(4)在cmake-gui界面点击左下角:Configure
(5)在第四步无错误的情况下,将下图的两个选项WITH_demos和WITH_examples勾选上,这样可以得到CGAL的例子程序(也可以不选上,在第七部分有讲解)然后点击Generate,完成后在你选择的输出路径下有一个CGAL.sln;
(6)建议在CGAL.sln选择好某一个工程为启动项目,否则生成几百个浪费时间。
运行之前,在环境变量里添加Path:…\CGAL-4.7\auxiliary\gmp\lib
当然以上这是运行编译生成的例子,如果我们需要自己建一个使用CGAL的工程,建立工程之后是需要配置的:
在使用CGAL的时候,需要设置 属性->配置属性->VC++目录:
可执行目录:
include目录中包含:
lib目录中包含:
属性->配置属性->链接器->输入中附加依赖项:
忽略项:
即便如此,最后还是会出现“找不到 CGAL-vc140-mt-gd-4.13.1.dll”,“找不到 CGAL_Core-vc140-mt-gd-4.13.1”,没关系,从$(CGAL_DIR)\build\bin中找出来,扔到你的项目目录下即可。
(7)看到这里说明第五步并没有成功,我就在Generate阶段遇到了诸多问题,这里告诉大家一一解决:
b2 stage --toolset=msvc-14.1 --with-thread --with-serialization --with-iostreams --with-regex --stagedir="D:\mySDK\boost_1_68_0\lib" link=shared runtime-link=shared threading=multi debug release
b2 stage --toolset=msvc-14.1 --with-thread --with-serialization --with-iostreams --with-regex --stagedir="D:\mySDK\boost_1_68_0\lib" link=static runtime-link=static threading=multi debug release
b2 stage --with-iostreams -s BZIP2_SOURCE="D:\mySDK\bzip2-1.0.6" -s ZLIB_SOURCE="D:\mySDK\zlib-1.2.11" --stagedir="D:\mySDK\boost_1_68_0\lib"
官网的教程很详细了,我们发现,在第五部分的第5步其实并不一定要勾选WITH_demos和WITH_examples生成sln,因为我们可以选择…\CGAL-4.13.1\demo或者…\CGAL-4.13.1\examples的某一个项目然后用cmake去编译生成,中间有一个小插曲,如果用cmake configure和generate生成出的某一个项目只有ALL_BUILD和ZERO_CHECK却没有你想要的工程,原因是用普通权限或者用户权限generate时cmake没有识别出环境变量CGAL_DIR的目录,记得在窗口的value值加上,这样就好了~
Qt5的安装
CGAL编译与配置
CGAL配置的一点心得(各种错误的解决办法)
CGAL配置后使用时遇到的一些问题及解决方法
CGAL在VS2013中的安装关键问题的解决
CGAL DEMO 演示