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

Posted

技术标签:

【中文标题】cmake - 如何可能链接 Boost 的 sub_directory 头文件(例如:/archive/text_oarchive.hpp)?【英文标题】:cmake - How to probably link Boost's sub_directory header files (eg: /archive/text_oarchive.hpp)? 【发布时间】:2018-12-14 14:49:18 【问题描述】:

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

我知道有很多类似的问题,所以让我们首先明确一点,我在编译 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 oastd::cout;
    int i = 1;
    oa << i;


信息:

操作系统:Linux Manjaro

IDE:CLion

Boost 版本:1.68.0-2

Boost 目录:/usr/include/boost/

【问题讨论】:

您需要调用include_directories(&lt;dir&gt;) 并选择&lt;dir&gt;,以便&lt;dir&gt;/boost/archive/text_oarchive.hpp 引用现有文件。 @Tsyvarev 你的意思是这样的 'include_directories($Boost_INCLUDE_DIRS/boost/archive/text_oarchive.hpp)' 会编译但会生成 50 行未定义的引用 “未定义的引用”与包含目录没有共同点:此错误意味着所需的库未链接。 嗯好的,那我该怎么办? (这是我最初的问题被困了一周,我什至重新安装并更改了系统)所以如果您尝试过并且如果您共享 cmakelist.txt 文件,它的工作思路? 您需要链接到 boost 的 serialization 库而不是 filesystem 库。 【参考方案1】:

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

大多数 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 - 静态 yaml-cpp 作为 git 子模块的链接器错误