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(<dir>)
并选择<dir>
,以便<dir>/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)?