1、下载地址:https://www.boost.org/users/history/version_1_72_0.html 或者 百度网盘下载:链接:https://pan.baidu.com/s/1-q6IJWcCrxZMsG_KSX1EQA 提取码:z2l4 ;
2、解压到安装目录:D:\Program Files\boost\boost_1_72_0 或者安装至相应盘的目录(建议没必要安装在C盘,因为比较大,当然C盘够大的,无所谓);
3、打开cmd,执行:cd E:\Program Files\boost\boost_1_72_0\tools\build\src\engine 再执行:build.bat gcc,执行结果如下:
(这里的gcc命令是取自DEVC++,PATH里面添加一下地址,如:D:\Program Files\Dev-Cpp\MinGW64\bin)
备注:当然直接用CMD运行,可能存在如下图的问题:
解决办法:D:\Program Files\boost_1_72_0\tools\build\src\engine目下双击运行“build.bat”,运行结果生成“bjam.exe”和“b2.exe”
4、把目录下生成的 bjam.exe 复制到boost根目录 D:\Program Files\boost\boost_1_72_0下并且将"VCRUNTIME140D.dll"拷贝至此目录下;打开cmd,执行 cd D:\Program Files\boost\boost_1_72_0;若你遇到上述问题,为节省时间建议直接双击“bjam.exe”,等待运行结束自动关闭此窗口。
注意:若提示无法找到"VCRUNTIME140D.dll"拷贝至你所在目录下,如 D:\Program Files\boost\boost_1_72_0,便可解决。
运行完的文件夹内容:
编译完成后,./boost/ 就是头文件,相当于 include 文件夹,./stage/lib/ 就是静态库。至于 boost 动态库的生成与使用,用到再说
新建两个系统变量
环境变量一:变量名:BOOST_INCLUDEDIR,变量值:D:\boost_1_72_0
环境变量二:变量名:BOOST_LIBRARYDIR,变量值:D:\boost_1_72_0\lib64-msvc-14.1
系统变量新建一个 Path
D:\boost_1_72_0\lib64-msvc-14.1
5、建议在“View”->“other Windows”->“Property Manager”->“Debug X64”新建一个“.props”自己命名一个,在此进行配置避免配置的开源库多,存在一些问题。在此我的命名为“CGAL.5.0.2_Configuration.props”
6、C++附加包含目录、C++附加库目录就是上面的 D:\Program Files\boost_1_72_0\boost和 D:\Program Files\boost_1_72_0\stage\lib 如下图所示:
Properties->C/C++->General->Additional Include Directories添加路径 D:\Program Files\boost_1_72_0\boost
Properties->Linker->General->Additional Library Directories添加目录 D:\Program Files\boost_1_72_0\stage\lib
7、链接器 - 输入 - 附加依赖项需要自己添加,添加方式为 ./stage/lib/
下新建一个 XXX.bat,内容写 DIR *.* /B>result.txt
,双击运行该 XXX.bat,就可以在 result.txt 中获取所有的 .lib,为方便直接复制,现陈列出来,
libboost_atomic-vc140-mt-gd-x32-1_72.lib
libboost_atomic-vc140-mt-gd-x64-1_72.lib
libboost_atomic-vc140-mt-x32-1_72.lib
libboost_atomic-vc140-mt-x64-1_72.lib
libboost_chrono-vc140-mt-gd-x32-1_72.lib
libboost_chrono-vc140-mt-gd-x64-1_72.lib
libboost_chrono-vc140-mt-x32-1_72.lib
libboost_chrono-vc140-mt-x64-1_72.lib
libboost_container-vc140-mt-gd-x32-1_72.lib
libboost_container-vc140-mt-gd-x64-1_72.lib
libboost_container-vc140-mt-x32-1_72.lib
libboost_container-vc140-mt-x64-1_72.lib
libboost_context-vc140-mt-gd-x32-1_72.lib
libboost_context-vc140-mt-gd-x64-1_72.lib
libboost_context-vc140-mt-x32-1_72.lib
libboost_context-vc140-mt-x64-1_72.lib
libboost_contract-vc140-mt-gd-x32-1_72.lib
libboost_contract-vc140-mt-gd-x64-1_72.lib
libboost_contract-vc140-mt-x32-1_72.lib
libboost_contract-vc140-mt-x64-1_72.lib
libboost_coroutine-vc140-mt-gd-x32-1_72.lib
libboost_coroutine-vc140-mt-gd-x64-1_72.lib
libboost_coroutine-vc140-mt-x32-1_72.lib
libboost_coroutine-vc140-mt-x64-1_72.lib
libboost_date_time-vc140-mt-gd-x32-1_72.lib
libboost_date_time-vc140-mt-gd-x64-1_72.lib
libboost_date_time-vc140-mt-x32-1_72.lib
libboost_date_time-vc140-mt-x64-1_72.lib
libboost_exception-vc140-mt-gd-x32-1_72.lib
libboost_exception-vc140-mt-gd-x64-1_72.lib
libboost_exception-vc140-mt-x32-1_72.lib
libboost_exception-vc140-mt-x64-1_72.lib
libboost_fiber-vc140-mt-gd-x32-1_72.lib
libboost_fiber-vc140-mt-gd-x64-1_72.lib
libboost_fiber-vc140-mt-x32-1_72.lib
libboost_fiber-vc140-mt-x64-1_72.lib
libboost_filesystem-vc140-mt-gd-x32-1_72.lib
libboost_filesystem-vc140-mt-gd-x64-1_72.lib
libboost_filesystem-vc140-mt-x32-1_72.lib
libboost_filesystem-vc140-mt-x64-1_72.lib
libboost_graph-vc140-mt-gd-x32-1_72.lib
libboost_graph-vc140-mt-gd-x64-1_72.lib
libboost_graph-vc140-mt-x32-1_72.lib
libboost_graph-vc140-mt-x64-1_72.lib
libboost_iostreams-vc140-mt-gd-x32-1_72.lib
libboost_iostreams-vc140-mt-gd-x64-1_72.lib
libboost_iostreams-vc140-mt-x32-1_72.lib
libboost_iostreams-vc140-mt-x64-1_72.lib
libboost_locale-vc140-mt-gd-x32-1_72.lib
libboost_locale-vc140-mt-gd-x64-1_72.lib
libboost_locale-vc140-mt-x32-1_72.lib
libboost_locale-vc140-mt-x64-1_72.lib
libboost_log-vc140-mt-gd-x32-1_72.lib
libboost_log-vc140-mt-gd-x64-1_72.lib
libboost_log-vc140-mt-x32-1_72.lib
libboost_log-vc140-mt-x64-1_72.lib
libboost_log_setup-vc140-mt-gd-x32-1_72.lib
libboost_log_setup-vc140-mt-gd-x64-1_72.lib
libboost_log_setup-vc140-mt-x32-1_72.lib
libboost_log_setup-vc140-mt-x64-1_72.lib
libboost_math_c99-vc140-mt-gd-x32-1_72.lib
libboost_math_c99-vc140-mt-gd-x64-1_72.lib
libboost_math_c99-vc140-mt-x32-1_72.lib
libboost_math_c99-vc140-mt-x64-1_72.lib
libboost_math_c99f-vc140-mt-gd-x32-1_72.lib
libboost_math_c99f-vc140-mt-gd-x64-1_72.lib
libboost_math_c99f-vc140-mt-x32-1_72.lib
libboost_math_c99f-vc140-mt-x64-1_72.lib
libboost_math_c99l-vc140-mt-gd-x32-1_72.lib
libboost_math_c99l-vc140-mt-gd-x64-1_72.lib
libboost_math_c99l-vc140-mt-x32-1_72.lib
libboost_math_c99l-vc140-mt-x64-1_72.lib
libboost_math_tr1-vc140-mt-gd-x32-1_72.lib
libboost_math_tr1-vc140-mt-gd-x64-1_72.lib
libboost_math_tr1-vc140-mt-x32-1_72.lib
libboost_math_tr1-vc140-mt-x64-1_72.lib
libboost_math_tr1f-vc140-mt-gd-x32-1_72.lib
libboost_math_tr1f-vc140-mt-gd-x64-1_72.lib
libboost_math_tr1f-vc140-mt-x32-1_72.lib
libboost_math_tr1f-vc140-mt-x64-1_72.lib
libboost_math_tr1l-vc140-mt-gd-x32-1_72.lib
libboost_math_tr1l-vc140-mt-gd-x64-1_72.lib
libboost_math_tr1l-vc140-mt-x32-1_72.lib
libboost_math_tr1l-vc140-mt-x64-1_72.lib
libboost_prg_exec_monitor-vc140-mt-gd-x32-1_72.lib
libboost_prg_exec_monitor-vc140-mt-gd-x64-1_72.lib
libboost_prg_exec_monitor-vc140-mt-x32-1_72.lib
libboost_prg_exec_monitor-vc140-mt-x64-1_72.lib
libboost_program_options-vc140-mt-gd-x32-1_72.lib
libboost_program_options-vc140-mt-gd-x64-1_72.lib
libboost_program_options-vc140-mt-x32-1_72.lib
libboost_program_options-vc140-mt-x64-1_72.lib
libboost_random-vc140-mt-gd-x32-1_72.lib
libboost_random-vc140-mt-gd-x64-1_72.lib
libboost_random-vc140-mt-x32-1_72.lib
libboost_random-vc140-mt-x64-1_72.lib
libboost_regex-vc140-mt-gd-x32-1_72.lib
libboost_regex-vc140-mt-gd-x64-1_72.lib
libboost_regex-vc140-mt-x32-1_72.lib
libboost_regex-vc140-mt-x64-1_72.lib
libboost_serialization-vc140-mt-gd-x32-1_72.lib
libboost_serialization-vc140-mt-gd-x64-1_72.lib
libboost_serialization-vc140-mt-x32-1_72.lib
libboost_serialization-vc140-mt-x64-1_72.lib
libboost_stacktrace_basic-vc140-mt-gd-x32-1_72.lib
libboost_stacktrace_basic-vc140-mt-x32-1_72.lib
libboost_stacktrace_noop-vc140-mt-gd-x32-1_72.lib
libboost_stacktrace_noop-vc140-mt-gd-x64-1_72.lib
libboost_stacktrace_noop-vc140-mt-x32-1_72.lib
libboost_stacktrace_noop-vc140-mt-x64-1_72.lib
libboost_stacktrace_windbg-vc140-mt-gd-x64-1_72.lib
libboost_stacktrace_windbg-vc140-mt-x64-1_72.lib
libboost_stacktrace_windbg_cached-vc140-mt-gd-x64-1_72.lib
libboost_stacktrace_windbg_cached-vc140-mt-x64-1_72.lib
libboost_system-vc140-mt-gd-x32-1_72.lib
libboost_system-vc140-mt-gd-x64-1_72.lib
libboost_system-vc140-mt-x32-1_72.lib
libboost_system-vc140-mt-x64-1_72.lib
libboost_test_exec_monitor-vc140-mt-gd-x32-1_72.lib
libboost_test_exec_monitor-vc140-mt-gd-x64-1_72.lib
libboost_test_exec_monitor-vc140-mt-x32-1_72.lib
libboost_test_exec_monitor-vc140-mt-x64-1_72.lib
libboost_thread-vc140-mt-gd-x32-1_72.lib
libboost_thread-vc140-mt-gd-x64-1_72.lib
libboost_thread-vc140-mt-x32-1_72.lib
libboost_thread-vc140-mt-x64-1_72.lib
libboost_timer-vc140-mt-gd-x32-1_72.lib
libboost_timer-vc140-mt-gd-x64-1_72.lib
libboost_timer-vc140-mt-x32-1_72.lib
libboost_timer-vc140-mt-x64-1_72.lib
libboost_type_erasure-vc140-mt-gd-x32-1_72.lib
libboost_type_erasure-vc140-mt-gd-x64-1_72.lib
libboost_type_erasure-vc140-mt-x32-1_72.lib
libboost_type_erasure-vc140-mt-x64-1_72.lib
libboost_unit_test_framework-vc140-mt-gd-x32-1_72.lib
libboost_unit_test_framework-vc140-mt-gd-x64-1_72.lib
libboost_unit_test_framework-vc140-mt-x32-1_72.lib
libboost_unit_test_framework-vc140-mt-x64-1_72.lib
libboost_wave-vc140-mt-gd-x32-1_72.lib
libboost_wave-vc140-mt-gd-x64-1_72.lib
libboost_wave-vc140-mt-x32-1_72.lib
libboost_wave-vc140-mt-x64-1_72.lib
libboost_wserialization-vc140-mt-gd-x32-1_72.lib
libboost_wserialization-vc140-mt-gd-x64-1_72.lib
libboost_wserialization-vc140-mt-x32-1_72.lib
libboost_wserialization-vc140-mt-x64-1_72.lib
添加如图所示:
上述Boost.1_72_0.txt文本中所包含的.lib文件可在此链接下载:
链接:https://pan.baidu.com/s/1_oNQJJTMrVqweHr-RUPF3Q
提取码:uly5
测试代码:
#include
#include
using namespace std;
int main() {
using boost::lexical_cast;
int a = lexical_cast
double b = lexical_cast
string s0 = lexical_cast
string s1 = lexical_cast
cout << "number: " << a << " " << b << endl;
cout << "string: " << s0 << " " << s1 << endl;
int c = 0;
try {
c = lexical_cast
} catch (boost::bad_lexical_cast &e) {
cout << e.what() << endl;
}
getchar();
return 0;
}
安装CGAL_5.0.2以及VS2015配置
1、下载的是 .exe 还是 .zip,前者进行安装,后者进行解压,效果都一样,贴一个CGAL_5.0.2的下载链接:
链接:https://pan.baidu.com/s/1jE0ZeLvBAwAwcGaqUV6rlQ
提取码:h676
2、检测是否安装正确,其一,第一,检查 ./CGAL/auxiliary/gmp/ 下是否有下图所示的内容;
其二,检查系统变量是否有 CGAL_DIR(变量值为 D:\CGAL) 这一变量,没有的话,自行添加!查看方法:“此电脑”->“属性”->“高级系统设置”->“高级”->“环境变量”->“系统变量”
其三,检查系统变量 Path 下是否增加C:\dev\CGAL-5.0.2\auxiliary\gmp,没有的话,自行添加!
3、CMake编译CGAL
(1)以管理员身份打开CMake,
注意:
第一次configure会出现一些红色,按照以下步骤修改:
其一,取消只编译头文件:CGAL_HEARDER_ONLY对应的勾取消
其二,将CMAKE_INSTALL_PREFIX改为我们的build文件,这样生成的lib,bin等文件就会位于build文件夹下
再点击configure至红色消失,然后点击generate,随后open project并在debugX64 和releaseX64 下分别生成ALL_BUILD
然后就可以在我们的build文件夹下找到对应的dll和lib,以及头文件。
CGAL.sln
4、解压出来的 include 目录、解压出来的 auxiliary\gmp\include 目录、以及 build 下的 include 目录都有用,共同作为 include 库;解压出来的 auxiliary\gmp\lib 目录、build 下的 lib 目录都有用,共同作为 lib 库,本文将编译生成的拷贝至解压或安装所在目录。将build文件夹下的bin文件夹拷贝至C:\dev\CGAL-5.0.2目录下(自己安装路径)。
5、工程属性改成 x64 的平台,debug 和 release 根据你的 CGAL 的配置来。
附加包含目录:Properties->C/C++->General->Additional Include Directories添加路径;
./boost/ ; C:\dev\CGAL-5.0.2\include ; C:\dev\CGAL-5.0.2\auxiliary\gmp\include;
附加库目录(两个 CGAL 的加两个 boost 的)
Properties->Linker->General->Additional Library Directories添加目录
C:\dev\CGAL-5.0.2;D:\Program Files\boost_1_72_0\lib64-msvc-14.1;C:\dev\CGAL-5.0.2\auxiliary\gmp\lib;./stage/lib/
添加.lib文件
Linker->Input->Additional Dependencies添加CGAL_5.0.2的.lib文件;
CGAL_5.0.2编译及安装生成的.lib文件
CGAL-vc140-mt-5.0.2.lib
CGAL-vc140-mt-gd-5.0.2.lib
CGAL_Core-vc140-mt-5.0.2.lib
CGAL_Core-vc140-mt-gd-5.0.2.lib
CGAL_ImageIO-vc140-mt-5.0.2.lib
CGAL_ImageIO-vc140-mt-gd-5.0.2.lib
libgmp-10.lib
libmpfr-4.lib
生成CGAL_5.0.2文件的.bat文件下载链接:链接:https://pan.baidu.com/s/1MzSUAHAyZpjPxXeasLLklA
提取码:qcup
使用方法:将生产的.lib文件拷贝至一个文件夹内,然后运行这个.bat生成一个.txt文本,其中文本内包含所有.lib文件名,拷贝至Additional Dependencies进行添加。
测试代码:
#include
#include
typedef CGAL::Simple_cartesian
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;
}
参考博文:
1、https://blog.csdn.net/qq_34719188/article/details/89850705;
2、https://developers.weixin.qq.com/community/develop/article/doc/000aa292a74b98c0c61a5664756813
3、https://blog.csdn.net/qq_36242312/article/details/104814360