Я использую CMake 3.8.2 и пользовательскую сборку Boost 1.64 на travis. Я устанавливаю переменную BOOST_ROOT
CMake на префикс, в который я установил boost. Однако он по-прежнему выбирает неправильные библиотеки (установленные системы), хотя находит мои заголовки.
Я пытался отладить все, что мог, но не смог найти причину. Любые идеи, почему CMake выбирает неправильные библиотеки?
С https://travis -ci.com / Возвращение к корням / Клиент s25 / builds / 96509387 :
ls -la "${BOOST_DIR}/lib"
total 37952 drwxr-xr-x 17 travis staff 578 Jan 5 16:20 . drwxr-xr-x 4 travis staff 136 Jan 5 16:18 ..
-rw-r--r-- 1 travis staff 259576 Jan 7 18:20 libboost_chrono.a
-rwxr-xr-x 1 travis staff 18656 Jan 7 18:20 libboost_chrono.dylib
-rwxr-xr-x 1 travis staff 132152 Jan 7 18:19 libboost_filesystem.dylib
-rwxr-xr-x 1 travis staff 151976 Jan 7 18:19 libboost_iostreams.dylib
-rwxr-xr-x 1 travis staff 768636 Jan 7 18:19 libboost_locale.dylib
-rwxr-xr-x 1 travis staff 82192 Jan 7 18:20 libboost_prg_exec_monitor.dylib
-rwxr-xr-x 1 travis staff 572724 Jan 7 18:19 libboost_program_options.dylib
-rwxr-xr-x 1 travis staff 1243824 Jan 7 18:20 libboost_regex.dylib
-rw-r--r-- 1 travis staff 103008 Jan 7 18:20 libboost_system.a
-rwxr-xr-x 1 travis staff 24932 Jan 7 18:18 libboost_system.dylib
-rw-r--r-- 1 travis staff 14620656 Jan 7 18:21 libboost_test_exec_monitor.a
-rwxr-xr-x 1 travis staff 160108 Jan 7 18:20 libboost_thread.dylib
-rw-r--r-- 1 travis staff 285880 Jan 7 18:20 libboost_timer.a
-rwxr-xr-x 1 travis staff 48080 Jan 7 18:20 libboost_timer.dylib
-rwxr-xr-x 1 travis staff 925444 Jan 7 18:20 libboost_unit_test_framework.dylib
-- [ /Users/travis/build/Return-To-The-Roots/s25client/deps/cmakeosx/share/cmake-3.8/Modules/FindBoost.cmake:1171 ] _boost_INCLUDE_SEARCH_DIRS = /Users/travis/build/Return-To-The-Roots/s25client/deps/boost1.64.0/include;/Users/travis/build/Return-To-The-Roots/s25client/deps/boost1.64.0;PATHS;C:/boost/include;C:/boost;/sw/local/include
-- [ /Users/travis/build/Return-To-The-Roots/s25client/deps/cmakeosx/share/cmake-3.8/Modules/FindBoost.cmake:1421 ] _boost_LIBRARY_SEARCH_DIRS_RELEASE = /Users/travis/build/Return-To-The-Roots/s25client/deps/boost1.64.0/lib;/Users/travis/build/Return-To-The-Roots/s25client/deps/boost1.64.0/stage/lib;/Users/travis/build/Return-To-The-Roots/s25client/deps/boost1.64.0/include/lib;/Users/travis/build/Return-To-The-Roots/s25client/deps/boost1.64.0/include/../lib;/Users/travis/build/Return-To-The-Roots/s25client/deps/boost1.64.0/include/stage/lib;PATHS;C:/boost/lib;C:/boost;/sw/local/lib_boost_LIBRARY_SEARCH_DIRS_DEBUG
= /Users/travis/build/Return-To-The-Roots/s25client/deps/boost1.64.0/lib;/Users/travis/build/Return-To-The-Roots/s25client/deps/boost1.64.0/stage/lib;/Users/travis/build/Return-To-The-Roots/s25client/deps/boost1.64.0/include/lib;/Users/travis/build/Return-To-The-Roots/s25client/deps/boost1.64.0/include/../lib;/Users/travis/build/Return-To-The-Roots/s25client/deps/boost1.64.0/include/stage/lib;PATHS;C:/boost/lib;C:/boost;/sw/local/lib
-- [ /Users/travis/build/Return-To-The-Roots/s25client/deps/cmakeosx/share/cmake-3.8/Modules/FindBoost.cmake:1567 ] Searching for FILESYSTEM_LIBRARY_RELEASE: boost_filesystem-mt-1_64;boost_filesystem-mt;boost_filesystem
-- [ /Users/travis/build/Return-To-The-Roots/s25client/deps/cmakeosx/share/cmake-3.8/Modules/FindBoost.cmake:365 ] Boost_LIBRARY_DIR_RELEASE = /usr/local/lib
_boost_LIBRARY_SEARCH_DIRS_RELEASE = /usr/local/lib;NO_DEFAULT_PATH;NO_CMAKE_FIND_ROOT_PATH
Boost_FILESYSTEM_LIBRARY_DEBUG:FILEPATH=/usr/local/lib/libboost_filesystem-mt.a
Если посмотреть на FindBoost в CMake 3.8.2, это приведет к тому, что find_library
будет в конечном итоге называться следующим образом:
find_library(result_var
NAMES boost_filesystem-mt-1_64;boost_filesystem-mt;boost_filesystem
HINTS /Users/travis/build/Return-To-The-Roots/s25client/deps/boost1.64.0/lib;<more paths>
NAMES_PER_DIR
DOC "${_boost_docstring_release}"
)
Если это находит /usr/local/lib/libboost_filesystem-mt.a
, это ДОЛЖНО НАЙТИ мою пользовательскую библиотеку, которая находится в первой опции HINTS и указана NAMES_PER_DIR. Я дважды проверил CMAKE_PREFIX_PATH, CMAKE_LIBRARY_PATH и CMAKE_FRAMEWORK_PATH, и все они пусты.
Так что же здесь происходит?
Чтобы уточнить разницу, например, Как мне заставить CMake найти мою альтернативную установку Boost? :
- Я использую
cmake .... -DBOOST_ROOT=$BOOST_DIR
- Он находит заголовки и не использует, например, модуль Boost.CMake
- Сначала в подсказках
find_library
указан «мой» путь, и NAMES_PER_DIR
должно означать, что он первым находит мои библиотеки, но не находит.