【问题标题】:vcpkg using local install of boost instead of vcpkg installvcpkg 使用本地安装的 boost 而不是 vcpkg 安装
【发布时间】:2023-01-12 03:39:24
【问题描述】:

我正在尝试使用 cmake 和 vcpkg 进行构建。我用 vcpkg 安装了一些包,包括 boost(iostreams、序列化和系统)。此外,我在本地安装了没有这些组件的 boost。当我尝试构建时,出现以下错误:

C:/Program Files/CMake/share/cmake-3.20/Modules/FindPackageHandleStandardArgs.cmake:594 (_FPHSA_FAILURE_MESSAGE)
C:/Program Files/CMake/share/cmake-3.20/Modules/FindBoost.cmake:2344 (find_package_handle_standard_args)
C:/dev/vcpkg/installed/x64-windows/share/boost/vcpkg-cmake-wrapper.cmake:11 (_find_package)
C:/dev/vcpkg/scripts/buildsystems/vcpkg.cmake:770 (include)
CMakeLists.txt:168 (FIND_PACKAGE)

CMakeCache.txt 包含以下行:

//Path to a file.
Boost_INCLUDE_DIR:PATH=C:/boost/boost_1_66_0

这是我本地安装的路径。如何让 cmake 使用 vcpkg 的 boost 安装?

编辑: 对于以后遇到这个问题的任何人,我遇到了this PR,他们显然解决了这个问题。但是,我在安装 OpenMVS 时仍然遇到同样的错误。

【问题讨论】:

  • 您可以尝试在 CMake 命令行上指定 BOOST_ROOTBoost_DIR,即 cmake -DBOOST_ROOT=<your_boost_vcpkg_dir> ... 并在重新运行 CMake 之前删除 CMakeCache.txt 文件。
  • 不幸的是,据我所知,vcpkg 没有 boost 根目录。相反,每个子组件都有自己的目录。
  • 删除缓存并重新配置。

标签: c++ boost cmake vcpkg


【解决方案1】:

构建和安装 boost 的正常方法是使用源代码附带的 bat 文件。这些都构建和安装所有头文件,并准备好任何构建的库。

但是使用 vcpkg 不会这样做。这在尝试使用 boost 时会产生问题。我不相信某种将 .hpp 文件放入目录的手工挑选方法。它非常复杂 - 原始的 boost build install bat 文件做得很好的过程。应该只有一个目录包含所有 .hpp 文件。

我们如何处理这种情况?仅仅因为我们选择使用 vcpkg 进行构建(并且它不进行安装)而没有很好地安装 boost?

由于在使用它的小组项目中工作,我*使用 vcpkg(不是真的*,只是被刺激)。

vcpkg 如何执行使用 bootstrap.bat 执行的职责,然后运行 ​​b2.exe install(或 --with-library)(这是一个可执行文件,因此很难理解它的作用)?

我想知道命令 vcpkg integrate install 是否应该处理这个问题。我想我会试试的。

顺便说一句,我不能将其作为问题发布,由于某种原因它在我的浏览器上不起作用。

【讨论】: