CMake包括Boost Beast(仅限标题)

时间:2017-11-01 21:30:40

标签: c++ boost cmake

我想在项目中加入Boost Beast。它是一个仅限标题的库。我已经将Beast存储库克隆到与我的项目相同的目录中。

我在CMake中使用以下内容来包含标题:

set(BEAST_INCLUDE_DIR ../beast/include)

include_directories(${BEAST_INCLUDE_DIR})

set(SOURCE_FILES ${BEAST_INCLUDE_DIR}/boost/beast.hpp ...)

add_library(my_lib ${SOURCE_FILES})

我包括使用以下内容(以及其他Boost包含):

#include <boost/beast.hpp>
#include <boost/asio/io_service.hpp>

但是我收到以下错误:

  

致命错误:boost / beast.hpp:没有这样的文件或目录

我是否需要做一些特别的事情来包含另一个“boost”目录? 标题的路径是:

beast/include/boost/beast.hpp

1 个答案:

答案 0 :(得分:2)

我建议为Beast创建an interface library,然后您可以将其作为依赖项添加到您的库中。

为Beast创建界面库:

add_library(boost_beast INTERFACE)

target_include_directories(boost_beast
                           SYSTEM
                           PUBLIC
                           "${CMAKE_CURRENT_LIST_DIR}/../beast/include")

请注意我已指定target_include_directories的电话:

  • SYSTEM:告诉编译器目录是系统包含目录
  • PUBLIC:告诉编译器目标应该对目标本身(boost_beast)和目标用户(您的库)可见

将Beast作为依赖项添加到您的库中:

然后,您可以将boost_beast作为依赖项添加到您的库中:

add_library(my_lib ${SOURCE_FILES})

target_link_libraries(my_lib boost_beast)

此时,my_lib将传递可用的Boost Beast包含目录。