最近在写一个跨平台的项目,因为要在Linux下面编译,自然就会用到makefile文件,但是又不想自己写,所以用工具cmake来自动生成再好不过了。因为使用了boost库,中途还遇到了些问题,于是,便记录下来。
首先,设置boost库的安装目录:
set(BOOST_ROOT /usr/local/boost)
因为本人的boost安装目录为/usr/local/boost,所以就设置成这个,你的boost安装目录是哪个就设置成哪个。如果不定义boost的根目录,则可能会找不到boost或者是找错目录。
然后,查找boost的相关库文件:
find_package(Boost COMPONENTS system filesystem thread log program_options REQUIRED)
主要是查找你的项目中使用到了的boost库,看是否能找到对应的库文件,这里如果不加上的话,后面链接的时候可能会报找不到boost相应库的错误。
接着便是包含相关的头文件了:
if(Boost_FOUND)
include_directories(${Boost_INCLUDE_DIRS})
endif()
如果不增加包含头文件这段代码,在编译的时候会报找不到boost的头文件错误。
最后,就是在链接的时候,增加boost库就OK了:
add_executable(testRemoteCmd ${test_SRCS})
target_link_libraries(testRemoteCmd HintRC ${Boost_LIBRARIES})
其中,testRemoteCmd是测试项目名称,HintRC是使用了boost库的动态库项目,最后${Boost_LIBRARIES}这个就是boost库的库文件了。如果在这里,你没有加上${Boost_LIBRARIES}这段代码的话,链接的时候就会报找不到boost相应库的错误。
至此,运行cmake .就可以生成对应的Makefile文件,然后make,大功告成也。下面是运行cmake的情形:
图中cmake的输出可以看出,此机器安装的boost版本是1.55.0,system,filesystem等库也都已经找到。再下面是make的情形:
从图中可以看出先是编译HintRC库,并且同时编译了HintRC的动态库和静态库,编译完成以后,再编译testRemoteCmd这个可执行程序,因为testRemoteCmd此文件是需要HintRc库的,所以得后编译。