c++ - 导入的目标 "Boost::system"包含不存在的路径 "/include"

标签 c++ boost cmake

我是 CMake 的新手,请耐心等待。我有一个库(libvpop),是我使用一些 Boost 组件(系统和日期时间)在 C++ 中创建的。我可以在 Windows 中毫无问题地链接到它,但在 Ubuntu 上,我收到一条错误,表明无法找到 boost 包含文件的路径。这是简单的 CMakeLists.txt 文件。

cmake_minimum_required(VERSION 3.0.0)


set (Boost_DEBUG 1)

project(vpoplibuser)

find_package(fmt CONFIG REQUIRED)
find_package(Boost CONFIG REQUIRED system )
find_package(Boost CONFIG REQUIRED date_time)


add_executable(vpoplibuser vpoplibuser.cpp vpoplib.h)


find_library(VPLIB libvpop HINTS ~/projects/vpoplibuser/ )

message(STATUS "VPLib include dir: ${VPLIB}")


target_include_directories(vpoplibuser PUBLIC  ${PROJECT_SOURCE_DIR} )

target_link_libraries(vpoplibuser PUBLIC ${VPLIB})
target_link_libraries(vpoplibuser PRIVATE fmt::fmt)
target_link_libraries(vpoplibuser PRIVATE Boost::system Boost::date_time)

当我运行 CMake 时,我收到消息: CMakeLists.txt 中的 CMake 错误 导入的目标“Boost::system”包含不存在的路径“/include” 在其 INTERFACE_INCLUDE_DIRECTORIES 中。可能的原因包括:

  • 路径已被删除、重命名或移至其他位置。
  • 安装或卸载过程未成功完成。
  • 安装包有错误并引用了未提供的文件。

我已删除并重新安装了 Boost。我的 Boost 库位于/lib/x86_64-linux-gnu。我无法确切地弄清楚 CMake 在哪里搜索 boost 包含文件。当我检查 boost_header-1.71.0/boost_headers-config.cmake 中的 _BOOST_INCLUDEDIR 变量时,它告诉我 _BOOST_INCLUDEDIR 是“/include”。我读过一些关于 PATH 变量是一个问题的内容,所以我将/usr 添加到我的 PATH 的开头(有一个文件夹/usr/include/boost ,其中包含 boost .hpp 文件,所以我假设这就是 CMake在寻找)。我已经被这个问题困扰了几天,所以我非常感谢专家社区的任何建议。

最佳答案

由于这篇文章,我找到了解决方法:https://github.com/VowpalWabbit/vowpal_wabbit/issues/3003

Boost cmake 进程中的某些内容导致 boost 在/include 处查找包含文件,而实际上它们位于/usr/include 处。我为/include 创建了一个指向/usr/include 的符号链接(symbolic link),这允许 cmake 找到所有内容。我尚未解决根本原因,但可以继续采用此方法。

关于c++ - 导入的目标 "Boost::system"包含不存在的路径 "/include",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70585114/

相关文章:

c++ - 使用 protobuf 构建 CMake 项目

c++ - 使用 cygwin 在 64 位 Windows 上的 C++ 中 int 指针的大小

C++ 保护类的私有(private) char *

c++ - 我可以将 Node.js C++ 扩展链接到 Node 的内部 OpenSSL 实现吗?

c++ - double boost::bind 导致编译时错误

dll - 将可执行文件链接到的所有 dll 复制到可执行文件目录

python - SWIG C++ 预编译 DLL

c++ - 调试 Boost.Serialization 地址跟踪

c++ - boost::multiprecision:乘以或除以 10 的巨大幂的最便宜的方法是什么?像 10 次幂的位移运算符之类的东西?

cmake - 如何使CMake在Windows上找到Google protobuf?