Как я мог бы связать повышение (не в usr / include) в CMakeList.txt используя find_package

#c #boost #cmake

#c #повышение #cmake

Вопрос:

Теперь мне нужно использовать " find_package(Boost 1.62.0 COMPONENTS program_options serialization system filesystem thread REQUIRED)" для включения некоторых библиотек в мою программу, но моя библиотека boost установлена в другом каталоге, а не в каталоге defualt ** (usr / include ..) **. Теперь возникают следующие ошибки:

  CMake Error at /usr/share/cmake/Modules/FindBoost.cmake:1138 (message):  
  Unable to find the requested Boost libraries.  
  Boost version: 1.41.0  
  Boost include path: /usr/includ  
  Detected version of Boost is too old.    
  Requested version was 1.62 (or
  newer).
  

Я выдаю некоторое содержимое моего CMakelist.txt:

 SET(BOOST_DIR /home/mingjli/folder_Mingjie/Software/boost_1.62.0/include/boost)
SET(BOOST_LIB /home/mingjli/folder_Mingjie/Software/boost_1.62.0/lib)  
INCLUDE (${Source_Path}/IndexerLauncher.cmake NO_POLICY_SCOPE)  
INCLUDE_DIRECTORIES(${BOOST_DIR})  
LINK_DIRECTORIES(${BOOST_LIB})  
INCLUDE_DIRECTORIES(${Source_Path})  
ADD_EXECUTABLE (indexer_launcher ${IndexerLauncher})  
TARGET_LINK_LIBRARIES (indexer_launcher nearest_search_lib)  
target_link_libraries( indexer_launcher ${Boost_LIBRARIES} )  
  

Спасибо!!

Ответ №1:

 Boost version: 1.41.0  
                 ^^
  

Это означает, что у вас установлена версия boost 1.41.0, но вы запрашиваете 1.62.0. Вы можете обновить boost или изменить минимальные требования к версии boost:

 find_package(Boost 1.41.0 COMPONENTS program_options serialization system filesystem thread REQUIRED)
                     ^^
  

В вашем нет ничего действительно особенного, что вы должны иметь в своем CMakeLists.txt чтобы включить повышение. Вот пример, который работает для меня:

 cmake_minimum_required(VERSION 2.8)
find_package(Boost REQUIRED filesystem system)
include_directories(${Boost_INCLUDE_DIRS})
target_link_libraries(mytarget ${Boost_LIBRARIES})
  

Обновить:
Если вы не можете обновить версию системы boost, вы можете установить boost в свою домашнюю папку:

  1. загрузить исходные тексты boost с www.boost.org
  2. скомпилируйте и установите новый boost в ваш домашний каталог:

    b2 toolset=gcc install --prefix=/home/user/boost

После компиляции boost вы можете использовать его из / home / user /boost:

 cmake .. -DBOOST_ROOT=/home/user/boost
  

Комментарии:

1. Привет, я знаю, что ты имеешь в виду. Но мне нужно повышение 1.62, а не повышение 1.41. К сожалению, у меня нет разрешения на обновление повышения с 1.41 до 1.62, это проблема. @Evgeniy

2. @MingjieLi, вы можете установить новый boost в свою домашнюю папку. Проверьте обновления ответа

3. Привет, @Evgeniy, большое тебе спасибо, теперь все в порядке. Однако возникает новая проблема: ‘missing_parameter’ не является членом ‘boost::program_options::invalid_syntax’. Я проверил, что invalid_syntax действительно содержит элемент «missing_parameter»,

4. @MingjieLi, ваш код include_directories может быть неправильным. используйте include_directories(${Boost_INCLUDE_DIRS}) вместо INCLUDE_DIRECTORIES(${BOOST_DIR}) . Вы также можете отобразить включаемые каталоги с помощью message () и проверить, верны ли они

5. Эта проблема возникала раньше, ранее я думал, что эта проблема связана с повышением 1.41, поскольку в этой версии класс invalid_syntax не имеет элемента missing_parameter. Но в версии 1.62 есть этот элемент, поэтому я не знаю почему, есть ли у вас какие-либо идеи по этому поводу. проблема. Спасибо!