我想将Boost Beast包含到我的项目中。这是一个仅 header 的库。我已将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>

但是我收到以下错误:



我是否需要做一些特殊的事情以包含另一个“提升”目录?
header 的路径为:
beast/include/boost/beast.hpp

最佳答案

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

为Beast创建接口(interface)库:

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)和目标用户(您的库)
  • 都可见

    将野兽添加为库的依赖项:

    然后,您可以将boost_beast作为依赖项添加到您的库中:
    add_library(my_lib ${SOURCE_FILES})
    
    target_link_libraries(my_lib boost_beast)
    

    此时,my_lib将可传递地具有Boost Beast包含目录。

    关于c++ - CMake包含Boost Beast(仅标题),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/47063988/

    10-12 21:09