我是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社区的任何建议。
2条答案
按热度按时间vom3gejh1#
我已经找到了一个工作周围感谢这篇文章:https://github.com/VowpalWabbit/vowpal_wabbit/issues/3003
Boost cmake进程中的某些东西导致boost在/include中查找包含文件,而它们实际上在/usr/include中。我为/include创建了一个指向/usr/include的符号链接,这允许cmake查找所有内容。我还没有解决根本原因,但可以继续使用此方法。
3htmauhk2#
我有这个问题几个月了。
我终于发现在我的机器(Ubuntu 20.04)上,PATH环境变量中有一个“/bin”(bin根目录)条目。
在我的例子中,在某个时候我不小心在~/. bashrc中添加了类似于'export PATH=$NOT_EXIST_VAR/bin'的内容。从~/.bashrc中删除这一行就解决了这个问题。