使用静态Boost库与vcpkg和CMake

13

我正在使用软件包管理器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 库:

Translated text:

然而,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 查找的位置。但是,我想在我的构建中使用静态库,以便所有的 DLL 都被“合并”到最终的 EXE 中。如何实现这一点?

如果路径 C:/vcpkg/installed/x64-windows/lib/boost_filesystem-vc140-mt.lib 是错误的,那么在您的计算机上静态库的 正确路径 是什么?根据 Boost 库的命名规则,boost_filesystem-vc140-mt.lib 实际上是一个静态库文件。 - Tsyvarev
1
@Tsyvarev:正确的路径应该是 C:/vcpkg/installed/x64-windows-static/lib/boost_filesystem-vc140-mt.lib。这是当我安装静态库时,vcpkg 设置的路径。 - BullyWiiPlaza
3个回答

5

我也遇到过同样的问题。

通过以下方式解决:

define  set(Boost_INCLUDE_DIR "path")

在使用 find_package 命令之前,请先设置 force。

当你使用 cmakevcpkg 时,可以在 CmakeCache.txt 文件中查找 _VCPKG_INSTALLED_DIR 变量。

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

1

默认情况下,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"
},

我还没有找到如何按照每个库的方式进行操作。

更多细节请参阅此处此处


0

实际上,我发现以下的CMake是正确工作的:

# Boost settings
set(Boost_USE_STATIC_LIBS        ON)  # only find static libs
set(Boost_USE_DEBUG_LIBS        OFF)  # ignore debug libs and
set(Boost_USE_RELEASE_LIBS       ON)  # only find release libs
set(Boost_USE_MULTITHREADED      ON)
set(Boost_USE_STATIC_RUNTIME     ON)  # link Boost Static libraries

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接