如何使用CMake在ubuntu上找到已安装的Boost库?

时间:2017-08-28 20:19:17

标签: c++ linux boost cmake

我已使用此命令安装了Boost

sudo apt-get install libboost-all-dev

我在main.cpp中写了这个简单的例子

#include <iostream>
#include <boost/asio.hpp>
#include <boost/date_time/posix_time/posix_time.hpp>

int main()
{
  boost::asio::io_service io;

  boost::asio::deadline_timer t(io, boost::posix_time::seconds(5));
  t.wait();

  std::cout << "Hello, world!" << std::endl;

  return 0;
}

在我的CMakeLists.txt中,我有这个:

cmake_minimum_required(VERSION 2.8)

find_package(Boost REQUIRED)
if(NOT Boost_FOUND)
    message(SEND_ERROR "Failed to find Boost")
    return()
else()
    include_directories(${Boost_INCLUDE_DIR})
endif()

add_executable(main main.cpp)

CMake工作正常,但在使用make启动后,我遇到了一些错误:

main.cpp:(.text+0x11f): undefined reference to `boost::system::generic_category()'

如何在我的CMakeLists.txt中正确包含boost,以便cmake可以找到库?

3 个答案:

答案 0 :(得分:1)

您需要链接到boost库。 FindBoost为此提供变量Boost_LIBRARIES

add_executable(main main.cpp)
target_link_libraries(main ${Boost_LIBRARIES})

有关详细信息,请参阅the FindBoost documentation。附近有一个例子。

答案 1 :(得分:0)

main.cpp:(.text+0x11f): undefined reference to `boost::system::generic_category()'

它在链接步骤失败了。您没有链接到系统库。你需要这样做。

关于使用提升的CMake,您没有遇到任何错误。您只需要告诉它系统需要链接。

答案 2 :(得分:0)

要添加以前的答案,here是您需要链接的Boost图书馆列表。 (截至Boost 1.65)

只需包含标题即可使用所有其他升级图书馆。