我想在项目中加入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
答案 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包含目录。