Почему CMake 3.16 ищет boost_program_options <version>вместо libboost_program_options <version>? - PullRequest
0 голосов
/ 20 января 2020

Я использую CMake 3.16 на Windows, чтобы сгенерировать решение для Visual Studio 2019, которое зависит от boost :: program_options. Это - ссылка на код на Github. Я построил Boost 1.72 с помощью следующей команды:

.\b2 install --reconfigure --prefix=F:\dev_programs\boost --build-type=complete

Были сгенерированы следующие библиотеки (ограничены выводом program_options, потому что это то, что CMake будет искать):

enter image description here

Команда find_package в файле CMakeLists.txt выглядит следующим образом:

find_package(Boost 1.72.0 COMPONENTS program_options REQUIRED)

Как видно из выходных данных ниже, когда cmake ищет библиотеку program_options, она ищет boost_program_options-vc142-mt-x64-1_72 вместо libboost_program_options-vc142-mt-x64-1_72.lib, сгенерированного при улучшенной сборке. Копирование созданных библиотек и удаление префикса lib делает это успешно. Однако не похоже, что мне нужно это делать.

Я не нашел ответа на вопрос, почему это происходит. У кого-нибудь еще есть идеи?

[ F:/dev_programs/cmake/share/cmake-3.16/Modules/FindBoost.cmake:2044 ] Searching for PROGRAM_OPTIONS_LIBRARY_RELEASE: boost_program_options-vc142-mt-x64-1_72;boost_program_options-vc142-mt-x64;boost_program_options-vc142-mt;boost_program_options-vc141-mt-x64-1_72;boost_program_options-vc141-mt-x64;boost_program_options-vc141-mt;boost_program_options-vc140-mt-x64-1_72;boost_program_options-vc140-mt-x64;boost_program_options-vc140-mt;boost_program_options-mt-x64-1_72;boost_program_options-mt-x64;boost_program_options-mt;boost_program_options-mt;boost_program_options
[ F:/dev_programs/cmake/share/cmake-3.16/Modules/FindBoost.cmake:649 ] Boost_LIBRARY_DIR_RELEASE = "F:\dev_programs\boost/lib"
[ F:/dev_programs/cmake/share/cmake-3.16/Modules/FindBoost.cmake:651 ] _boost_LIBRARY_SEARCH_DIRS_RELEASE = "F:\dev_programs\boost/lib;NO_DEFAULT_PATH;NO_CMAKE_FIND_ROOT_PATH"
[ F:/dev_programs/cmake/share/cmake-3.16/Modules/FindBoost.cmake:2099 ] Searching for PROGRAM_OPTIONS_LIBRARY_DEBUG: boost_program_options-vc142-mt-gd-x64-1_72;boost_program_options-vc142-mt-gd-x64;boost_program_options-vc142-mt-gd;boost_program_options-vc141-mt-gd-x64-1_72;boost_program_options-vc141-mt-gd-x64;boost_program_options-vc141-mt-gd;boost_program_options-vc140-mt-gd-x64-1_72;boost_program_options-vc140-mt-gd-x64;boost_program_options-vc140-mt-gd;boost_program_options-mt-gd-x64-1_72;boost_program_options-mt-gd-x64;boost_program_options-mt-gd;boost_program_options-mt;boost_program_options
[ F:/dev_programs/cmake/share/cmake-3.16/Modules/FindBoost.cmake:649 ] Boost_LIBRARY_DIR_DEBUG = "F:\dev_programs\boost/lib"
[ F:/dev_programs/cmake/share/cmake-3.16/Modules/FindBoost.cmake:651 ] _boost_LIBRARY_SEARCH_DIRS_DEBUG = "F:\dev_programs\boost/lib;NO_DEFAULT_PATH;NO_CMAKE_FIND_ROOT_PATH"
CMake Error at F:/dev_programs/cmake/share/cmake-3.16/Modules/FindPackageHandleStandardArgs.cmake:146 (message):
  Could NOT find Boost (missing: program_options) (found suitable version
  "1.72.0", minimum required is "1.72.0")
Call Stack (most recent call first):
  F:/dev_programs/cmake/share/cmake-3.16/Modules/FindPackageHandleStandardArgs.cmake:393 (_FPHSA_FAILURE_MESSAGE)
  F:/dev_programs/cmake/share/cmake-3.16/Modules/FindBoost.cmake:2165 (find_package_handle_standard_args)
  CMakeLists.txt:23 (find_package)

1 Ответ

0 голосов
/ 20 января 2020

Похоже, комментарии @Tsyvarev и @squareskittles были правильными.

Мне нужно было построить Boost с link=shared и runtime-link=shared, предоставленными для b2.exe. Я пробовал это, но теперь, попробовав его на компьютере с ускоренной загрузкой fre sh, он работал волшебным образом. Учитывая, что я буду чистить окружающую среду и попробую еще раз.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...