2016-05-01 2 views
-1

Я пытаюсь связать с библиотеками boost_system для моего проекта Windows CMake, но продолжаю получать следующую ошибку. Я попробовал несколько предлагаемых решений по подобным вопросам, но ничего не работает.Ссылка CMake с библиотеками Boost

Error:Unable to find the requested Boost libraries. 
Boost version: 1.60.0 
Boost include path: C:/Program Files/boost_1_60_0 
Could not find the following Boost libraries: 
    boost_system 
No Boost libraries were found. You may need to set BOOST_LIBRARYDIR to the 
directory containing Boost libraries or BOOST_ROOT to the location of Boost. 

Это текущее состояние моего файла CMake (отношение увеличить)

set(Boost_USE_STATIC_LIBS OFF) 
set(Boost_USE_MULTITHREADED ON) 
set(Boost_USE_STATIC_RUNTIME OFF) 

SET(BOOST_INCLUDEDIRS "C:/Program Files/boost_1_60_0") 
SET(BOOST_LIBRARYDIR "C:/Program Files/boost_1_60_0/lib") 

find_package(Boost 1.60.0 COMPONENTS system REQUIRED) 

if(Boost_FOUND) 
    include_directories(${Boost_INCLUDE_DIRS}) 
LINK_DIRECTORIES(${Boost_LIBRARY_DIRS}) 
endif() 
+0

какой компилятор вы используете? –

+3

Пробовал настройку только 'BOOST_ROOT'? – arrowd

+0

@ J-Mik Я использую MinGW в качестве компилятора. –

ответ

1

Вот как я использую его переносимым, но вам нужно указать необходимые компоненты:

Первый вам нужно построить библиотеку. Откройте командную строку в окнах и типа в этом: (необходимо указать/bin/папки в папку установки MinGW, поэтому изменить первую строку соответственно)

PATH=C:\MinGW\bin;%PATH% 
cd C:/Program Files/boost_1_60_0/ 
bootstrap.bat 
b2 --toolset=gcc link=static --build-type=complete 

Это должно занять несколько минут, чтобы собрать , Тогда в ваших CMakeLists.txt добавить:

if (WIN32) 
    set(BOOST_ROOT C:/Program Files/boost_1_60_0/) 
    set(Boost_USE_STATIC_LIBS OFF) 
    set(Boost_USE_MULTITHREADED ON) 
    set(Boost_USE_STATIC_RUNTIME OFF) 

    include_directories(${BOOST_ROOT}) 
    link_directories(${BOOST_ROOT}/stage/lib) # add this before add_executable() 
endif() 

# Here add your add_executable function 
add_executable(your_exec ${SOURCE_FILES} ${INCLUDE_FILES}) 

if(NOT MSVC) 
    find_package(Boost REQUIRED COMPONENTS date_time filesystem wserialization system serialization thread regex) 

    if (Boost_FOUND) 
     include_directories(${Boost_INCLUDE_DIRS}) 
     target_link_libraries(your_exec ${Boost_LIBRARIES}) 
    endif() 
endif() 
+0

Спасибо, но это не сработало: S Same error –

+1

@ Gabriel-Asman вы сначала создали библиотеку? Я обновил свой ответ, чтобы показать вам, как построить его с помощью MinGW. –

+0

Был ли он по-прежнему не работает. Это как ничего не меняет, делает любую другую ошибку .... –

0

Вы используете имя переменной неправильно. Это должно быть

SET(BOOST_INCLUDEDIR "C:/Program Files/boost_1_60_0") 

Учесть недостающие множественные числа. Смотрите также https://cmake.org/cmake/help/v3.5/module/FindBoost.html

Кстати, вы не должны установить его таким образом, но добавить к C:/Program Files/boost_1_60_0CMAKE_PREFIX_PATH и передать вашему Cmake вызова.

+0

Это _output variables_ скрипта. Если вы установите их вручную, вам не нужно вообще вызывать скрипт find. 'BOOST_ROOT',' BOOST_INCLUDEDIR' и 'BOOST_LIBRARYDIR' следует использовать, чтобы давать подсказки в качестве входных параметров скрипту find. – ComicSansMS

+0

@ComicSansMS: Вы правы, меня смутил тип вопроса. Тем не менее, я думаю, что это опечатка. Спасибо за подсказку. – usr1234567