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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了cmake - 如何链接Boost的sub_directory头文件(例如:/archive/text_oarchive.hpp)?相关的知识,希望对你有一定的参考价值。

我的用例很简单:在文件中存储一堆对象。然而,我已经被困了一个星期尝试不同的东西

我知道有很多类似的问题所以让我们首先明确表示我没有问题编译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

是:克莱恩

提升版:1.68.0-2

提升目录:/ usr / include / boost /

答案

简短的回答:你需要链接serialization库的boost。

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

请参阅Boost header only libraries,了解简单的include_directories(${Boost_INCLUDE_DIRS})是否足够,或者是否需要将库添加到find_package(Boost COMPONENTS ...)调用中

以上是关于cmake - 如何链接Boost的sub_directory头文件(例如:/archive/text_oarchive.hpp)?的主要内容,如果未能解决你的问题,请参考以下文章

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

在 cmake 配置后的链接阶段不尊重 BOOST_ROOT

无法在 CMAKE 中链接 Boost

Boost.Python 和 CMake 链接和加载错误

在 CMake 中链接 boost 文件系统的问题

使用 cmake 增强链接