CMake не может связать буст-библиотеки - PullRequest
0 голосов
/ 04 мая 2018

CMake может найти мою установленную версию boost (1.67.0), но всякий раз, когда я пытаюсь связать библиотеку, я получаю кучу "неопределенных ссылок".

Это программа, которую я хочу запустить (пример найден на сайте boost):

#include <boost/regex.hpp>
#include <iostream>
#include <string>

int main(int, char *[])
{
    std::string line;
    boost::regex pat("^Subject: (Re: |Aw: )*(.*)");

    while(std::cin) {
        std::getline(std::cin, line);
        boost::smatch matches;
        if(boost::regex_match(line, matches, pat)) {
            std::cout << matches[2] << '\n';
        }
    }

    return 0;
}

Это мой сценарий CMake:

cmake_minimum_required( VERSION 3.5 )

project( REGEX )

set( BOOST_ROOT D:/Dev/boost/boost_1_67_0/boost_1_67_0 )
set( Boost_LIBRARY_DIR D:/Dev/boost/boost_1_67_0/boost_1_67_0/stage/lib )
set( Boost_USE_STATIC_LIBS ON )
set( Boost_USE_MULTITHREADED ON )

find_package( Boost REQUIRED )

include_directories( ${Boost_INCLUDE_DIRS} )

add_executable( regex ${PROJECT_SOURCE_DIR}/main.cxx )

target_link_libraries( regex ${Boost_LIBRARIES} )

Что мне нужно сделать, чтобы успешно связать библиотеки boost с cmake?

EDIT: Я изменил сценарий, теперь он выглядит так:

cmake_minimum_required( VERSION 3.5 )

project( REGEX )

set( BOOST_ROOT D:/Dev/boost/boost_1_67_0/boost_1_67_0 )
set( BOOST_INCLUDEDIR D:/Dev/boost/boost_1_67_0/boost_1_67_0/boost )
set( BOOST_LIBRARYDIR D:/Dev/boost/boost_1_67_0/boost_1_67_0/stage/lib )
set( Boost_USE_STATIC_LIBS ON )
set( Boost_USE_MULTITHREADED ON )
set( Boost_DEBUG ON )

find_package( Boost COMPONENTS regex REQUIRED )

include_directories( ${Boost_INCLUDE_DIRS} )

add_executable( regex ${PROJECT_SOURCE_DIR}/main.cxx )

target_link_libraries( regex ${Boost_LIBRARIES} )

После включения отладки для надстройки я обнаружил, что в cmake нет каталога для поиска библиотек, поэтому я попытался установить его вручную. Я только что установил версию CMake 3.11.1, но он все еще не распознает библиотеку регулярных выражений.

1 Ответ

0 голосов
/ 04 мая 2018

Видимо, Boost_LIBRARIES пусто. Вы должны явно указать компоненты Boost, с которыми вы хотите связать, в find_package(Boost REQUIRED [COMPONENTS components]), чтобы они появлялись в Boost_LIBRARIES.

В вашем случае это должно быть find_package(Boost REQUIRED COMPONENTS regex)

См. Документацию cmake-boost: https://cmake.org/cmake/help/v3.8/module/FindBoost.html

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...