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

C++ CMake找不到Boost库二进制文件(二进制文件的新命名约定),c++,boost,cmake,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(Te

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

当我使用仅限页眉的库时,所有功能都可以使用:

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.
关于另一个问题,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的预编译二进制文件(从中获取)如何让CMake识别二进制文件中使用的命名约定?


对另一个问题的评论建议不要重命名这些文件。

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

因此,只有在1.66 Boost发行版之后的CMake版本才有此修复,从3.11开始就是这样

因此,您有两个选择:

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

如果由于公司政策,您只能使用一个版本,则必须使用后一种解决方案。

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

因此,只有在1.66 Boost发行版之后的CMake版本才有此修复,从3.11开始就是这样

因此,您有两个选择:

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

如果由于公司政策,您只能使用一个版本,则必须使用后一种解决方案。

您使用的是哪个CMake版本?只有在3.11之后,CMake才支持新的Boost命名约定。您还可以在您的项目中使用更新的FindBoost,这也很有效。不需要重命名任何东西。哦,哇,我实际上使用的是3.10。我现在觉得很愚蠢,因为我已经在这上面浪费了2个多小时。你用的是哪个CMake版本?只有在3.11之后,CMake才支持新的Boost命名约定。您还可以在您的项目中使用更新的FindBoost,这也很有效。不需要重命名任何东西。哦,哇,我实际上使用的是3.10。我现在觉得自己很愚蠢,因为我已经在这上面浪费了2个多小时。3.12版就不行了<代码>[C:/Program Files/CMake/share/CMake-3.12/Modules/FindBoost.CMake:1809]搜索系统库调试:libboost\u SYSTEM-mgw73-mt-d-1\u 68;libu系统-mgw73-mt-d;libboost_系统-mt-d-1_68;libu系统-mt-d;libu系统-mt;libu系统;libboost_系统-mgw73-mt-s-d-1_68;libu系统-mgw73-mt-s-d;libboost_系统-mt-s-d-1_68;libboost_system-mt-s-d
在3.12中不起作用<代码>[C:/Program Files/CMake/share/CMake-3.12/Modules/FindBoost.CMake:1809]搜索系统库调试:libboost\u SYSTEM-mgw73-mt-d-1\u 68;libu系统-mgw73-mt-d;libboost_系统-mt-d-1_68;libu系统-mt-d;libu系统-mt;libu系统;libboost_系统-mgw73-mt-s-d-1_68;libu系统-mgw73-mt-s-d;libboost_系统-mt-s-d-1_68;libboost_system-mt-s-d