cmake 导入的目标“Boost::system”包含不存在的路径“/include”

z5btuh9x  于 2022-12-13  发布在  其他
关注(0)|答案(2)|浏览(556)

我是CMake的新手,请耐心等待。我有一个库(libvpop),是我用一些Boost组件(system和date_time)在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”在其INTERFACE_INCLUDE_DIRECTORIES中包含不存在的路径“/include”。可能的原因包括:

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

我已经删除并重新安装了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到我的路径的开头(有一个文件夹/usr/include/boost,其中有boost .hpp文件,所以我做了一个假设,这就是CMake正在寻找的)。我已经在这个问题上停留了几天,所以我会感谢Maven社区的任何建议。

vom3gejh

vom3gejh1#

我已经找到了一个工作周围感谢这篇文章:https://github.com/VowpalWabbit/vowpal_wabbit/issues/3003
Boost cmake进程中的某些东西导致boost在/include中查找包含文件,而它们实际上在/usr/include中。我为/include创建了一个指向/usr/include的符号链接,这允许cmake查找所有内容。我还没有解决根本原因,但可以继续使用此方法。

3htmauhk

3htmauhk2#

我有这个问题几个月了。
我终于发现在我的机器(Ubuntu 20.04)上,PATH环境变量中有一个“/bin”(bin根目录)条目。
在我的例子中,在某个时候我不小心在~/. bashrc中添加了类似于'export PATH=$NOT_EXIST_VAR/bin'的内容。从~/.bashrc中删除这一行就解决了这个问题。

相关问题