cmake-如何可能链接Boost的sub_directory头文件(例如:/archive/text_oarchive.hpp)?

时间:2018-12-14 14:49:18

标签: c++ serialization boost cmake

我的用例很简单:将一堆对象存储在一个文件中。但是,我被困了一个星期尝试其他东西

我知道有很多类似的问题,所以让我们首先清楚地说明我在编译boost并使用filesystem.hpp标头(例如,CMakeLists.txt)时没有问题

cmake_minimum_required(VERSION 3.12)
project(Project2)

set(CMAKE_CXX_STANDARD 14)

set(Boost_USE_STATIC_LIBS OFF)
set(Boost_USE_MULTITHREADED ON)
set(Boost_USE_STATIC_RUNTIME OFF)

find_package(Boost 1.68 COMPONENTS filesystem)
include_directories(${Boost_INCLUDE_DIRS})
add_executable(Project2 main.cpp)
target_link_libraries(Project2 PUBLIC ${Boost_LIBRARIES})

但是,我不能用所需的标头替换文件系统,因为它们不在boost的根目录中

  

text_oarchive.hpp

     

text_iarchive.hpp

这会给我以下错误 No header defined for text_oarchive; skipping header check

要清楚,如何编辑CMakeLists.txt(如上所述),以便我可以运行此示例(不是我的实际+300行代码)

#include <boost/archive/text_oarchive.hpp>
#include <iostream>

using namespace boost::archive;

int main()
{
    text_oarchive oa{std::cout};
    int i = 1;
    oa << i;

}
  

信息:

     

操作系统:Linux Manjaro

     

IDE:CLion

     

增强版本:1.68.0-2

     

Boost目录:/ usr / include / boost /

1 个答案:

答案 0 :(得分:0)

简短的回答:您需要链接到serialization Boost的库中。

大多数Boost库只是标头,但有一些要求您链接到相应的库。

请参见Boost header only libraries,以了解简单的include_directories(${Boost_INCLUDE_DIRS})是否足够? 需要将库添加到您的find_package(Boost COMPONENTS ...)通话