Boost_LIBRARIES не определено - PullRequest
5 голосов
/ 08 мая 2019

Я пытаюсь скомпилировать FreeLing, который использует CMake для обнаружения Boost.Вот код, отвечающий за это:

  find_package(Boost COMPONENTS regex filesystem thread program_options REQUIRED)

Эти компоненты найдены (согласно выводу, сгенерированному CMake):

-- Found Boost 1.70.0 at /home/ambs/usr/lib/cmake/Boost-1.70.0
--   Requested configuration: QUIET REQUIRED COMPONENTS regex;filesystem;thread;program_options
-- Found boost_headers 1.70.0 at /home/ambs/usr/lib/cmake/boost_headers-1.70.0
-- Found boost_regex 1.70.0 at /home/ambs/usr/lib/cmake/boost_regex-1.70.0
--   libboost_regex.so.1.70.0
-- Adding boost_regex dependencies: headers
-- Found boost_filesystem 1.70.0 at /home/ambs/usr/lib/cmake/boost_filesystem-1.70.0
--   libboost_filesystem.so.1.70.0
-- Adding boost_filesystem dependencies: headers
-- Found boost_thread 1.70.0 at /home/ambs/usr/lib/cmake/boost_thread-1.70.0
--   libboost_thread.so.1.70.0
-- Adding boost_thread dependencies: headers
-- Found boost_program_options 1.70.0 at /home/ambs/usr/lib/cmake/boost_program_options-1.70.0
--   libboost_program_options.so.1.70.0
-- Adding boost_program_options dependencies: headers
-- Boost  found.
-- Found Boost components:
   regex;filesystem;thread;program_options

Тем не менее, похоже, что Boost_LIBRARIES никогдазадавать.Я попробовал это:

  find_package(Boost COMPONENTS regex filesystem thread program_options REQUIRED)
  message(STATUS "Boost_LIBRARIES=" ${Boost_LIBRARIES})

, и он всегда выводит пустую строку.

Для справки, у меня CMake версии 3.14.3 и Boost версии 1.70.0.

1 Ответ

6 голосов
/ 08 мая 2019

Строка

Найдено Boost 1.70.0 в /home/ambs/usr/lib/cmake/Boost-1.70.0

означает, что модуль CMake FindBoost.cmake не обнаруживает библиотеки и заголовки Boost, используя собственные методы, но обращается к сценарию BoostConfig.cmake, расположенному в каталоге, показанном в журнале.

Документация для FindBoost.cmake примечаний модулятаким образом:

Этот модуль находит заголовки и запрошенные библиотеки компонентов ИЛИ файл конфигурации пакета CMake, предоставляемый сборкой «Boost CMake».В последнем случае перейдите к разделу «Boost CMake» ниже.Для первого случая результаты представлены в переменных:

Короче говоря, использование сценария BoostConfig.cmake означает, что он устанавливает свои собственные переменные или цели, а те, которые описаны в документации для FindBoost.cmake, недопустимы.

Скорее всего, файл "Config" устанавливает IMPORTED target таким же образом, как описано в документации FindBoost.cmake, то есть Boost::regex, Boost::filesystem и так далее.


Если вы хотите отключить использование BoostConfig.cmake и заставить FindBoost.cmake вести себя так, как описано в его документации, установите переменную Boost_NO_BOOST_CMAKE.Например, когда звоните cmake:

cmake -DBoost_NO_BOOST_CMAKE=ON <other-options>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...