为 cmake 添加 boost 编译库

Posted Just_ForFun

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了为 cmake 添加 boost 编译库相关的知识,希望对你有一定的参考价值。

boost 具有很好的平台独立性, 因此会作为首选的 api 来完成特定的功能.

我在项目中使用了 boost 的 filesystem 功能来获取程序的运行目录.

#include <boost/filesystem/path.hpp> 
#include <boost/filesystem/operations.hpp>
 
int main()
{
    ...
    std::string exePath = boost::filesystem::initial_path<boost::filesystem::path>().string();
    ...

    return 0;
}

但编译的时候提示如下错误:

In function `__static_initialization_and_destruction_0(int, int)‘:
process_template.cpp:(.text+0x1d09c): undefined reference to `boost::system::generic_category()‘
process_template.cpp:(.text+0x1d0a8): undefined reference to `boost::system::generic_category()
process_template.cpp:(.text+0x1d0b4): undefined reference to `boost::system::system_category()‘
CMakeFiles/process.dir/src/process_template.cpp.o: In function `boost::filesystem::initial_path()‘:
process_template.cpp:(.text._ZN5boost10filesystem12initial_pathEv[_ZN5boost10filesystem12initial_pathEv]+0x19): undefined reference to `boost::filesystem::detail::initial_path(boost::system::error_code*)‘
collect2: error: ld returned 1 exit status

很明显是没有将对应的库链接进来. 因此, 需要在 CmakeLists.txt 中添加关于 boost 的链接选项.

cmake_minimum_required(VERSION 2.8)
project( process )

SET(CMAKE_CXX_FLAGS ${CMAKE_CXX_FLAGS} "-std=c++11")
find_package(Boost REQUIRED COMPONENTS
# regex
filesystem   # 我的工程中只使用了 boost 的 filesystem 功能,因此这里只有一个组件
)
if(NOT Boost_FOUND)
    message("Not found Boost")
endif()

include_directories(${Boost_INCLUDE_DIRS})
message("${Boost_INCLUDE_DIRS}")
message("${Boost_LIBRARIES}")

add_executable( process src/process_template.cpp )
target_link_libraries(process ${Boost_LIBRARIES})

然后重新 make, 就可以顺利通过了.

[ 50%] Linking CXX executable process
[100%] Built target process

以上是关于为 cmake 添加 boost 编译库的主要内容,如果未能解决你的问题,请参考以下文章

Windows 下Cmake 编译libtins(带boost库)

Linux下使用CMake进行编译的时候寻找Boost库

clion配置cmake添加boost库

如何用Visual Studio 2010编译boost1.42库

如何为“类似boost”的多组件库编写cmake模块?

Boost1.67编译+CMake Generate时遇到的一个错误