【问题标题】:Using static Boost libraries with vcpkg and CMake使用带有 vcpkg 和 CMake 的静态 Boost 库
【发布时间】:2020-05-24 17:00:07
【问题描述】:

我正在使用包管理器vcpkg 通过vcpkg install boost:x64-windows-static 安装(静态)Boost 库。

此外,我使用CMake 作为构建系统,并通过-DCMAKE_TOOLCHAIN_FILE CMake 命令将C:\vcpkg\scripts\buildsystems\vcpkg.cmake 传递给CMake

在我的 CMakeLists.txt 中,我强制使用静态 Boost 库:

set(Boost_USE_STATIC_LIBS ON)
find_package(Boost COMPONENTS filesystem iostreams REQUIRED)
if (Boost_FOUND)
    include_directories(${Boost_INCLUDE_DIRS})
    link_directories(${Boost_LIBRARY_DIRS})
endif ()

# ...

target_link_libraries(${PROJECT_NAME} ${Boost_LIBRARIES})

但是,Visual Studio 仍然试图为我的 Boost 库查找错误的文件路径:

Error 'C:/vcpkg/installed/x64-windows/lib/boost_filesystem-vc140-mt.lib', needed by 'MyProject.exe', missing and no known rule to make it

如果我安装动态的Boost 库,它将构建良好,因为这是Visual Studio 的外观。但是,我想在我的构建中使用静态库,以便所有 DLLs 都“合并”到最终的 EXE

我怎样才能做到这一点?

【问题讨论】:

  • 如果路径C:/vcpkg/installed/x64-windows/lib/boost_filesystem-vc140-mt.lib 错误,那么您机器上静态库的正确路径是什么?根据 Boost 库命名约定,boost_filesystem-vc140-mt.lib 实际上是一个静态库文件。
  • @Tsyvarev:正确的路径是C:/vcpkg/installed/x64-windows-static/lib/boost_filesystem-vc140-mt.lib。这就是我安装静态库时vcpkg 的设置方式。

标签: c++ visual-studio boost cmake vcpkg


【解决方案1】:

我遇到了同样的问题。

解决了

define  set(Boost_INCLUDE_DIR "path")

在 find_package 强制之前。

当您使用cmakevcpkg 时,在CmakeCache.txt 中找到_VCPKG_INSTALLED_DIR 变量

set(Boost_INCLUDE_DIR ${_VCPKG_INSTALLED_DIR}/x64-windows-static/include)

【讨论】:

    【解决方案2】:

    似乎默认情况下 vcpkg.cmake 脚本会自动检测由 vcpkg 安装的动态库。

    您可以通过在调用 cmake 时设置一个变量来为您的项目覆盖此行为:

    cmake .. -DCMAKE_TOOLCHAIN_FILE=.../vcpkg.cmake -DVCPKG_TARGET_TRIPLET=x64-windows-static
    

    或者使用 CMakePresets.json:

    "cacheVariables": {
     ...
      "CMAKE_TOOLCHAIN_FILE": {
        "value": "$env{VCPKG_ROOT}/scripts/buildsystems/vcpkg.cmake",
        "type": "FILEPATH"
      },
      "VCPKG_TARGET_TRIPLET": "x64-windows-static"
    },
    

    我还没有找到如何在每个库的基础上执行此操作。

    更多详情herehere

    【讨论】:

      猜你喜欢
      • 2014-01-06
      • 2022-10-23
      • 1970-01-01
      • 2011-03-11
      • 2021-07-12
      • 1970-01-01
      • 2012-08-14
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多