Я пытаюсь скомпилировать 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
.Есть ли способ сделать это?