我首先说这不是环境变量的问题。
当我仅使用标头库时,一切都可以正常运行:
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的另一个问题的评论建议不要重命名文件。
答案 0 :(得分:2)
在更新的Boost(1.66及更高版本)中,二进制文件的命名约定已更改。现在,还有一个x64
或x32
。
因此,只有1.66 Boost版本之后的CMake版本才具有此修复程序,从3.11
开始就是这种情况。
为您提供两个选择:
3.11
以上FindBoost.cmake
(通常兼容)。如果由于公司政策而“卡住”一个版本,则必须使用后一种解决方案。