Ошибка find_package (Boost), когда BOOST_INCLUDEDIR & BOOST_LIBRARYDIR отличаются - PullRequest
0 голосов
/ 17 апреля 2019

Я пытаюсь скомпилировать Boost как разделяемые библиотеки и сделать их зависимостью моего кроссплатформенного проекта CMake.

Для этого я скомпилировал boost для win32, x64 и linux, гдемоя структура папок Boost выглядит следующим образом:

- boost_1_69_0/
  - boost/
  - stage/
    - win32
      - lib
    - x64
      - lib
    - linux
      - lib

Затем я делаю:

set(BOOST_INCLUDEDIR ${CMAKE_CURRENT_SOURCE_DIR}/../external/boost_1_69_0)
set(BOOST_LIBRARYDIR ${CMAKE_CURRENT_SOURCE_DIR}/../external/boost_1_69_0/stage/win32)
find_package(Boost REQUIRED COMPONENTS filesystem)

И получаю:

CMake Error at C:/Program Files/CMake/share/cmake-3.13/Modules/FindBoost.cmake:2100 (message):
Unable to find the requested Boost libraries.

Boost version: 1.69.0

Boost include path: C:/bla/SW/cmake-template/external/boost_1_69_0

Could not find the following Boost libraries:

        boost_filesystem

Это ошибка?


Если я переместу папку lib изнутри win32 в ее родительский каталог, то есть:

- boost_1_69_0/
  - boost/
  - stage/
    - lib

, которая является способом сборки по умолчанию для boost b2, тогда все будет работать,Но тогда я не могу держать разные бинарные файлы для разных платформ.


EDIT :

с использованием set(Boost_DEBUG ON) Я обнаружил, что мой буст скомпилирован с VisualНабор инструментов Studio v141, в то время как мой проект использует v140, и поэтому FindBoost ищет boost_filesystem-vc140-mt-x64-1_69, а не boost_filesystem-vc140-mt-x64-1_69.

Я полагаю, что проблема перешла к поиску способа принудительного поиска v141 или(лучше) используйте --layout=system и найдите способ заставить его всегда искать boost_filesystem.Есть ли способ сделать это?

1 Ответ

1 голос
/ 17 апреля 2019

Проблема здесь в том, что CMake ищет библиотеки повышения, соответствующие определенной схеме именования.Ваши библиотеки отличаются от этого, так как есть некоторые опции, закодированные в имени файла.У вас есть два варианта:

  1. Снова скомпилировать повышение, но на этот раз с флагом --layout=system при запуске исполняемого файла b2.Это создаст библиотечные файлы со стандартными именами, такими как boost_filesystem.dll и boost_filesystem.lib.
  2. . Дайте CMake несколько подсказок о том, как называются ваши библиотечные файлы, используя следующие переменные, выделенные для вариантов буста (так как у меня нет аналогичной системы, как ваша, то это предположения, которые вам, возможно, придется принять):
    • Boost_ARCHITECTURE="-x32"
    • Boost_COMPILER="-vc141"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...