CMake не находит двоичные файлы библиотеки Boost (новое соглашение об именах для двоичных файлов) - PullRequest
0 голосов
/ 24 ноября 2018

Я начинаю с того, что это не проблема с переменными среды.

Когда я использую только библиотеки заголовков, все прекрасно работает с этим:

set(Boost_USE_STATIC_LIBS OFF)
set(Boost_USE_MULTITHREADED ON)
set(Boost_USE_STATIC_RUNTIME OFF)
find_package(Boost REQUIRED)

if(Boost_FOUND)
    include_directories(${Boost_INCLUDE_DIRS})
    add_executable(TestCMake Program.cpp)
    target_link_libraries(TestCMake ${Boost_LIBRARIES})
endif()

Но когда я пытаюсьзапросить библиотеку, изменив find_package(Boost REQUIRED) на find_package(Boost REQUIRED COMPONENTS system) Я получаю ошибку:

Unable to find the requested Boost libraries.

Boost version: 1.67.0

Boost include path: D:/boost/boost_1_67_0

Could not find the following Boost libraries:

        boost_system

No Boost libraries were found.  You may need to set BOOST_LIBRARYDIR to the
directory containing Boost libraries or BOOST_ROOT to the location of
Boost.

Этот ответ на другой вопрос предполагает, что CMake ожидает, что двоичные файлы Boost будут названы в определенномпуть:

boost_thread-vc100-mt-1_51
boost_thread-vc100-mt
boost_thread-mt-1_51
boost_thread-mt
boost_thread

У меня есть предварительно скомпилированный двоичный файл (полученный из здесь ) с именем boost_system-vc141-mt-x32-1_67.lib. Как я мог заставить CMake распознать соглашение об именах, используемое в моих двоичных файлах?

Комментарии к этому ответу с понижением голосов на этот другой вопрос предлагают не переименовывать файлы.

1 Ответ

0 голосов
/ 24 ноября 2018

В более новой версии Boost (1.66 и более поздних) соглашение об именах двоичных файлов изменилось.Теперь есть дополнительное x64 или x32.

. Таким образом, только версия CMake, предшествующая релизу 1.66 Boost, имеет это исправление, которое имеет место, начиная с 3.11.

Итак, у вас есть два варианта:

  • Обновите версию CMake до версии выше 3.11
  • Используйте FindBoost.cmake от одной из этих более новых версий CMake (обычно они совместимы)).

Последнее решение придется использовать, если вы «застряли» с одной версией из-за политики компании.

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