CMake找不到Boost库二进制文件(二进制文件的新命名约定)

时间:2018-11-24 10:07:37

标签: c++ boost cmake

我首先说这不是环境变量的问题。

当我仅使用标头库时,一切都可以正常运行:

set(Boost_USE_STATIC_LIBS OFF)
set(Boost_USE_MULTITHREADED ON)
set(Boost_USE_STATIC_RUNTIME OFF)
find_package(Boost REQUIRED)

if(Boost_FOUND)
    include_directories(${Boost_INCLUDE_DIRS})
    add_executable(TestCMake Program.cpp)
    target_link_libraries(TestCMake ${Boost_LIBRARIES})
endif()

但是当我尝试通过将find_package(Boost REQUIRED)更改为find_package(Boost REQUIRED COMPONENTS system)来要求图书馆时,我得到了一个错误:

Unable to find the requested Boost libraries.

Boost version: 1.67.0

Boost include path: D:/boost/boost_1_67_0

Could not find the following Boost libraries:

        boost_system

No Boost libraries were found.  You may need to set BOOST_LIBRARYDIR to the
directory containing Boost libraries or BOOST_ROOT to the location of
Boost.

This answer在另一个问题上表明CMake期望Boost二进制文件以某种方式命名:

boost_thread-vc100-mt-1_51
boost_thread-vc100-mt
boost_thread-mt-1_51
boost_thread-mt
boost_thread

我有一个名为boost_system-vc141-mt-x32-1_67.lib的预编译二进制文件(从here获取)。 如何使CMake识别二进制文件中使用的命名约定?

this downvoted answer的另一个问题的评论建议不要重命名文件。

1 个答案:

答案 0 :(得分:2)

在更新的Boost(1.66及更高版本)中,二进制文件的命名约定已更改。现在,还有一个x64x32

因此,只有1.66 Boost版本之后的CMake版本才具有此修复程序,从3.11开始就是这种情况。

为您提供两个选择:

  • 将您的CMake版本升级到3.11以上
  • 使用这些较新的CMake版本之一的FindBoost.cmake(通常兼容)。

如果由于公司政策而“卡住”一个版本,则必须使用后一种解决方案。