windows + cmake + boost 征服之旅

最近工作中用到了Redis,于是在网上找了一个C++版本Redis客户端源码,完全够用。本来事情到这里就完了,但是搞事情的我想多了解一些RedisClient的实现方法,于是在github上又下载了一个基于Boost的实现版本,于是痛苦的过程开始了。

1.遇到问题,解决问题

我之前是用过一些开源的工具的,所以这次在我下载好源码之后,自信满满的做了如下步骤:

1.在根目录下创建一个msvc目录;

2.在msvc目录下打开命令行工具执行:cmake ..

3.然后CMake大哥给我的反馈是这样的,意思就是我找不到这些库(PS:我的boost也不再C盘):

windows + cmake + boost 征服之旅_第1张图片

然后查了一下资料,需要设置一下BOOST_ROOT告诉CMake大哥咱的boost到底安装在哪了,还要设置一下BOOST_NO_SYSTEM_PATHS=true告诉大哥我们不使用系统环境变量。因为我的环境变量里面也没有和boost相关的所以第二个宏就不管了。

好了,我觉得我已经找到了解决问题的真谛,于是我做了如下操作;

1.在根目录下创建一个msvc目录;

2.在msvc目录下打开命令行工具执行:cmake -DBOOST_ROOT=X:\ThirdPart\boost ..

3.然后给我的反馈是这样的:Could not find the following Boost libraries: boost_croutime...;总之意思就是:我找不到这些库文件;
 

windows + cmake + boost 征服之旅_第2张图片

在网上搜了一些解决方法,不过,大家的说法都很一致啊:就是设置这两个宏T_T。我已经觉得这个问题无解了;

就在这个时候翻到一个帖子上面介绍说cmake大哥找的库是这个样子的"boost_atomic-vc140-mt-gd-x32-1_68.lib",而我看了一下我的库是这个样子的"libboost_atomic-vc140-mt-gd-x32-1_68.lib";看到这里我几乎都要去手动改库名称了(实际上已经开始行动了,只是看到要改的实在太多迟疑了一下),但是又想了一下,解决方法怎么可能这么无脑,如果真是这样那Windows下使用cmake+boost的同行早就翻了天了。我突然想到生成boost的时候只生成了静态库,难道动态库就是CMake大哥需要的类型吗?于是花费了半天的时间又重新编译了Boost库(电脑太渣);终于成功了!

2.再次分析问题

虽然问题已经解决了,工程也生成成功了,但是我还是有点耿耿于怀:为什么非要我花费半天的时间去编译我都不怎么用的boost的动态库啊!我就不用这个不行吗?

于是找了一下findboost.cmake搜了一下"static"看看有没有指定使用静态库的,果然有Boost_USE_STATIC_LIBS,测试一下:

1.删除boost/lib里面的动态库以及其链接库;

2.执行cmake -DBoost_USE_STATIC_LIBS=ON -BOOST_ROOT=X:\thirdPart\boost ..

执行成功了!

3.总结

这里面涉及到三个宏,了解其作用,之后再遇到这种问题就能迎刃而解了:

BOOST_ROOT:指定boost的目录;

BOOST_NO_SYSTEM_PATHS:是否使用系统路径;

Boost_USE_STATIC_LIBS:是否使用静态链接库;

你可能感兴趣的:(boost,cmake)