导入的目标 "Boost::system" 包含不存在的路径“/include”
Imported target "Boost::system" includes non-existent path "/include"
我是CMake的新手,请多多包涵。我有一个库 (libvpop),它是我使用一些 Boost 组件(系统和 date_time)在 C++ 中创建的。我可以在 windows 中 link 毫无问题地访问它,但在 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 创建了一个符号 link 以指向 /usr/include,这允许 cmake 找到所有内容。我还没有解决根本原因,但可以继续使用这种方法。
我是CMake的新手,请多多包涵。我有一个库 (libvpop),它是我使用一些 Boost 组件(系统和 date_time)在 C++ 中创建的。我可以在 windows 中 link 毫无问题地访问它,但在 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 创建了一个符号 link 以指向 /usr/include,这允许 cmake 找到所有内容。我还没有解决根本原因,但可以继续使用这种方法。