CMake找到了Boost,但未请求库 我试图用CGub来增加对C++应用程序的支持。我已经通读了所有相关的问题,我觉得我正在接近一个解决方案。但是由于某些原因,CMake仍然无法找到请求的Boost库

CMake找到了Boost,但未请求库 我试图用CGub来增加对C++应用程序的支持。我已经通读了所有相关的问题,我觉得我正在接近一个解决方案。但是由于某些原因,CMake仍然无法找到请求的Boost库,c++,boost,cmake,C++,Boost,Cmake,我试图找到“boost_文件系统”。调试显示CMake正在寻找“boost_filesystem-vc141-mt-gd-1_65_1”。我确实在文件夹“C:\boost\boost\u 1\u 65\u 1\stage\lib”中有文件“libboost\u filesystem-vc141-mt-gd-1\u 65\u 1.lib”。我想这就是CMake正在查找的文件,但出于某些原因,CMake说它找不到它 下面是我用来构建Boost的过程。对于大多数人来说,这可能是太多的细节了,但我怀疑这

我试图找到“boost_文件系统”。调试显示CMake正在寻找“boost_filesystem-vc141-mt-gd-1_65_1”。我确实在文件夹“C:\boost\boost\u 1\u 65\u 1\stage\lib”中有文件“libboost\u filesystem-vc141-mt-gd-1\u 65\u 1.lib”。我想这就是CMake正在查找的文件,但出于某些原因,CMake说它找不到它

下面是我用来构建Boost的过程。对于大多数人来说,这可能是太多的细节了,但我怀疑这可能对另一个新手有所帮助

  • 下载并解压缩文件夹C:\Boost\Boost\u 1\u 65\u 1中的Boost 1.65.1
  • 转到开发者提示命令行并在上面的文件夹下运行bootstrap.bat
  • 更新了C:\boost\boost\u 1\u 65\u 1\boost\config\compiler下的visualc.hpp文件(请参阅
  • 替换了文件visualc.hpp底部的行:

    // last known and checked version is 19.11.25506 (VC++ 2017.3):
    #if (_MSC_VER > 1911)
    

  • 打开文件夹boost_1_65_1下的另一个文件project-config.jam,并将第二行更新为以下内容:

    使用msvc:14.1:“C:\Program Files(x86)\Microsoft Visual Studio\2017 \Professional\VC\Tools\MSVC\14.13.26128\bin\Hostx64\x64\cl.exe”

  • 返回开发人员提示命令行并运行以下命令以生成Boost:

    b2工具集=msvc-14.1地址模型=64

  • 我似乎正确地完成了以下几项:

    • 已正确构建库,但未使用默认目录。我确认已构建请求的库
    • 将路径正确分配给CMake指定的目录
    • 已正确使用CMake find_package()
    以下是我正在使用的相关版本:

    • VS:2017 v15.6.1和CMake 3.10
    • Boost版本:1.65.1,使用MSVC 14.1工具构建
    以下是CMakelist.txt:

    cmake_minimum_required(VERSION 3.6 FATAL_ERROR)
    project(test)
    
    set(Boost_USE_STATIC_LIBS       OFF)
    set(Boost_USE_MULTITHREADED      ON)
    set(Boost_USE_STATIC_RUNTIME    OFF)
    
    set(Boost_DEBUG ON)
    
    set(BOOST_ROOT C:\\boost\\boost_1_65_1)
    set(BOOST_INCLUDEDIR C:\\boost\\boost_1_65_1)
    set(BOOST_LIBRARYDIR C:\\boost\\boost_1_65_1\\stage\\lib)
    
    set(Boost_DEBUG 1)
    
    find_package(Boost COMPONENTS filesystem REQUIRED)
    
    message(STATUS "Boost LIBRARIES: " ${Boost_LIBRARIES})   
    add_executable(test_Boost main.cpp)
    target_link_libraries(test_Boost ${Boost_LIBRARIES})
    
    以下是可能相关的部分输出:

    1> Command line: C:\PROGRAM FILES (X86)\MICROSOFT VISUAL STUDIO\2017\PROFESSIONAL\COMMON7\IDE\COMMONEXTENSIONS\MICROSOFT\CMAKE\CMake\bin\cmake.exe  -G "Ninja" -DCMAKE_INSTALL_PREFIX:PATH="C:\Users\david\CMakeBuilds\94321a3b-9fa8-083f-a86f-e151c3abae79\install\x64-Release"  -DCMAKE_CXX_COMPILER="C:/Program Files (x86)/Microsoft Visual Studio/2017/Professional/VC/Tools/MSVC/14.13.26128/bin/HostX64/x64/cl.exe"  -DCMAKE_C_COMPILER="C:/Program Files (x86)/Microsoft Visual Studio/2017/Professional/VC/Tools/MSVC/14.13.26128/bin/HostX64/x64/cl.exe"  -DCMAKE_BUILD_TYPE="RelWithDebInfo" -DCMAKE_MAKE_PROGRAM="C:\PROGRAM FILES (X86)\MICROSOFT VISUAL STUDIO\2017\PROFESSIONAL\COMMON7\IDE\COMMONEXTENSIONS\MICROSOFT\CMAKE\Ninja\ninja.exe" "E:\computer\boost\cmake"
    1> Working directory: C:\Users\david\CMakeBuilds\94321a3b-9fa8-083f-a86f-e151c3abae79\build\x64-Release
    1> -- [ C:/Program Files (x86)/.../FindBoost.cmake:1073 ] _boost_TEST_VERSIONS = 1.65.1;1.65.0;1.65;1.64.0
    1> -- [ C:/Program Files (x86)/.../FindBoost.cmake:1075 ] Boost_USE_MULTITHREADED = ON
    1> -- [ C:/Program Files (x86)/.../FindBoost.cmake:1077 ] Boost_USE_STATIC_LIBS = OFF
    1> -- [ C:/Program Files (x86)/.../FindBoost.cmake:1079 ] Boost_USE_STATIC_RUNTIME = OFF
    1> -- [ C:/Program Files (x86)/.../FindBoost.cmake:1081 ] Boost_ADDITIONAL_VERSIONS = 
    1> -- [ C:/Program Files (x86)/.../FindBoost.cmake:1083 ] Boost_NO_SYSTEM_PATHS = 
    1> -- [ C:/Program Files (x86)/.../FindBoost.cmake:1151 ] Declared as CMake or Environmental Variables:
    1> -- [ C:/Program Files (x86)/.../FindBoost.cmake:1153 ]   BOOST_ROOT = C:\boost\boost_1_65_1
    1> -- [ C:/Program Files (x86)/.../FindBoost.cmake:1155 ]   BOOST_INCLUDEDIR = C:\boost\boost_1_65_1
    1> -- [ C:/Program Files (x86)/.../FindBoost.cmake:1157 ]   BOOST_LIBRARYDIR = C:\boost\boost_1_65_1\stage\lib
    1> -- [ C:/Program Files (x86)/.../FindBoost.cmake:1159 ] _boost_TEST_VERSIONS = 1.65.1;1.65.0;1.65;1.64.0;...
    1> -- [ C:/Program Files (x86)/.../FindBoost.cmake:1258 ] location of version.hpp: C:/boost/boost_1_65_1/boost/version.hpp
    1> -- [ C:/Program Files (x86)/.../FindBoost.cmake:1282 ] version.hpp reveals boost 1.65.1;...
    1> -- [ C:/Program Files (x86)/.../FindBoost.cmake:1368 ] guessed _boost_COMPILER = -vc141;-vc140
    1> -- [ C:/Program Files (x86)/.../FindBoost.cmake:1378 ] _boost_MULTITHREADED = -mt
    1> -- [ C:/Program Files (x86)/.../FindBoost.cmake:1422 ] _boost_RELEASE_ABI_TAG = -
    1> -- [ C:/Program Files (x86)/.../FindBoost.cmake:1424 ] _boost_DEBUG_ABI_TAG = -gd
    1> -- [ C:/Program Files (x86)/.../FindBoost.cmake:1486 ] _boost_LIBRARY_SEARCH_DIRS_RELEASE = C:\boost\boost_1_65_1\stage\lib;C:\boost\boost_1_65_1/lib;...
    1> -- [ C:/Program Files (x86)/.../FindBoost.cmake:1636 ] Searching for FILESYSTEM_LIBRARY_RELEASE: boost_filesystem-vc141-mt-1_65_1;boost_filesystem-vc141-mt
    1> -- [ C:/Program Files (x86)/.../FindBoost.cmake:1687 ] Searching for FILESYSTEM_LIBRARY_DEBUG: boost_filesystem-vc141-mt-gd-1_65_1;boost_filesystem-vc141-mt-gd
    1> -- [ C:/Program Files (x86)/.../FindBoost.cmake:1636 ] Searching for SYSTEM_LIBRARY_RELEASE: boost_system-vc141-mt-1_65_1;boost_system-vc141-mt
    1> -- [ C:/Program Files (x86)/.../FindBoost.cmake:1687 ] Searching for SYSTEM_LIBRARY_DEBUG: boost_system-vc141-mt-gd-1_65_1;boost_system-vc141-mt-gd
    1> -- [ C:/Program Files (x86)/.../FindBoost.cmake:1762 ] Boost_FOUND = 1
    1> -- Boost LIBRARIES: 
    1> CMake Error at C:/Program Files (x86)/.../FindBoost.cmake:1923 (message):
    1>   Unable to find the requested Boost libraries.
    1> 
    1>   Boost version: 1.65.1
    1> 
    1>   Boost include path: C:/boost/boost_1_65_1
    1> 
    1>   Could not find the following Boost libraries:
    1> 
    1>           boost_filesystem
    1> 
    1>   Some (but not all) of the required Boost libraries were found.  You may
    1>   need to install these additional Boost libraries.  Alternatively, set
    1>   BOOST_LIBRARYDIR to the directory containing Boost libraries or BOOST_ROOT
    1>   to the location of Boost.
    1> Call Stack (most recent call first):
    1>   CMakeLists.txt(17): (find_package)
    1> 
    1> 
    1> -- Configuring incomplete, errors occurred!
    1> See also "C:/Users/david/CMakeBuilds/94321a3b-9fa8-083f-a86f-e151c3abae79/build/x64-Release/CMakeFiles/CMakeOutput.log".
    1> C:\PROGRAM FILES (X86)\MICROSOFT VISUAL STUDIO\2017\PROFESSIONAL\COMMON7\IDE\COMMONEXTENSIONS\MICROSOFT\CMAKE\CMake\bin\cmake.exe  -G "Ninja" -DCMAKE_INSTALL_PREFIX:PATH="C:\Users\david\CMakeBuilds\94321a3b-9fa8-083f-a86f-e151c3abae79\install\x64-Release"  -DCMAKE_CXX_COMPILER="C:/Program Files (x86)/Microsoft Visual Studio/2017/Professional/VC/Tools/MSVC/14.13.26128/bin/HostX64/x64/cl.exe"  -DCMAKE_C_COMPILER="C:/Program Files (x86)/Microsoft Visual Studio/2017/Professional/VC/Tools/MSVC/14.13.26128/bin/HostX64/x64/cl.exe"  -DCMAKE_BUILD_TYPE="RelWithDebInfo" -DCMAKE_MAKE_PROGRAM="C:\PROGRAM FILES (X86)\MICROSOFT VISUAL STUDIO\2017\PROFESSIONAL\COMMON7\IDE\COMMONEXTENSIONS\MICROSOFT\CMAKE\Ninja\ninja.exe" "E:\computer\boost\cmake" returned with exit code: 1
    CMake Error at C:/Program Files (x86)/.../FindBoost.cmake:1923 (message):
      Unable to find the requested Boost libraries.
      Boost version: 1.65.1
      Boost include path: C:/boost/boost_1_65_1
      Could not find the following Boost libraries:
              boost_filesystem
      Some (but not all) of the required Boost libraries were found.  You may
      need to install these additional Boost libraries.  Alternatively, set
      BOOST_LIBRARYDIR to the directory containing Boost libraries or BOOST_ROOT
      to the location of Boost.
    Call Stack (most recent call first):
      CMakeLists.txt:17 (find_package)
    

    libboost_filesystem-vc141-mt-gd-1_65_1.lib
    是文件系统库的静态版本(名称以lib开头)

    在CMake中,您正在搜索动态版本:

    set(Boost_USE_STATIC_LIBS       OFF)
    
    这无法工作。现在您必须选择以下选项:

  • 关闭
    切换到
    打开
  • 使用以下添加项重建boost:
  • b2工具集=msvc-14.1地址模型=64--构建类型=完成
    


    命令
    --build type=complete
    生成库的所有受支持的变体。为了安全起见;-)

    只是为了确保。您是如何构建boost的?您能给出boost库的完整名称吗?您已经设置了
    boost\u DEBUG
    变量,这样您就可以看到(在构建日志中)搜索到与
    文件系统
    boost组件相对应的确切文件以及搜索位置。顺便说一句,您的代码集
    Boost\u DEBUG
    变量有两次,第一次设置为
    ON
    ,然后设置为
    1
    @Soeren我刚刚添加了我要查找的库名。我还添加了有关构建Boost的过程的详细信息。谢谢。@Tsyvarev我删除了Boost_调试的重复设置。我还复制了带有调试信息的完整输出。我还添加了更多关于我正在寻找的图书馆的信息。我无法理解输出的意义。你能帮我看看吗?一切看起来都很正常。。。除了
    libboost_filesystem-vc141-mt-gd-1_65_1.lib
    -这是一个静态库(它有
    lib
    ),但是您要求
    find_package(Boost)
    查找共享库(
    设置(Boost_USE_static_LIBS OFF)
    )。
    set(Boost_USE_STATIC_LIBS       OFF)