无法在 CMAKE 中链接 Boost

Posted

技术标签:

【中文标题】无法在 CMAKE 中链接 Boost【英文标题】:Fail to Link Boost in CMAKE 【发布时间】:2019-11-15 15:04:58 【问题描述】:

这是我的 CMakeList.text :

cmake_minimum_required(VERSION 3.12)
project(project)

set(CMAKE_CXX_STANDARD 14)

FIND_PACKAGE(Boost 1.66 REQUIRED date_time program_options thread filesystem system unit_test_framework)
IF($Boost_FOUND)
    INCLUDE_DIRECTORIES($Boost_INCLUDE_DIR)
ENDIF()

add_executable(project main.cpp)

target_link_libraries(project $Boost_LIBRARIES)

它配置得很好,并且根据它确实找到了提升所在的输出信息。

但是,当我尝试运行我的程序时,它显示错误:

gmake[3]: *** No rule to make target '/usr/include/_ansi.h', needed by 'CMakeFiles/project.dir/main.cpp.o'.  Stop.
gmake[2]: *** [CMakeFiles/Makefile2:76: CMakeFiles/project.dir/all] Error 2
gmake[1]: *** [CMakeFiles/Makefile2:83: CMakeFiles/project.dir/rule] Error 2
gmake: *** [Makefile:118: project] Error 2

其中_ansi.h 是我的/usr/include/ 中的第一个头文件,boost 也位于/usr/include/boost。我检查了该文件确实存在,如果我删除它,它会说no rule to make target on the second header file

知道如何解决这个问题吗?

【问题讨论】:

代码中使用的Boost_INCLUDE_DIRBoost_LIBRARIES 变量的内容是什么? (我知道这些变量是由find_package(Boost) 设置的,但它们的实际内容可能会说明问题)。 【参考方案1】:

此片段直接改编自official documentation:

find_package(Boost 1.66 REQUIRED COMPONENTS date_time program_options thread filesystem system unit_test_framework)
if (Boost_FOUND)
    add_executable(pro main.cpp)
    target_link_libraries(pro Boost::date_time Boost::program_options Boost::thread Boost::filesystem Boost::system Boost::unit_test_framework)
endif()

【讨论】:

以上是关于无法在 CMAKE 中链接 Boost的主要内容,如果未能解决你的问题,请参考以下文章

在 cmake 配置后的链接阶段不尊重 BOOST_ROOT

Linux make 无法链接到 Boost 非标头库

如何使用 CMake 自动链接 boost 库

Boost.Python 和 CMake 链接和加载错误

CMake 生成的程序无法在 Windows 上链接:尝试链接到不存在的文件

cmake - 如何链接Boost的sub_directory头文件(例如:/archive/text_oarchive.hpp)?