我想将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/