c ++ - CMake kan ikke linke boost libs

Indlæg af Hanne Mølgaard Plasc

Problem



CMake kan finde min version af boost installeret (1.67.0), men når jeg forsøger at forbinde et bibliotek, får jeg et ton af 'undefined reference'.


Dette er det program, jeg vil køre (eksemplet findes på boosts hjemmeside):


#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] << '
';
        }
    }

    return 0;
}


Dette er mit CMake script:


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} )


Hvad skal jeg gøre for at kunne linke boost biblioteker med cmake?


REDIGERE:
Jeg har ændret scriptet, så nu ser det sådan ut:


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} )


Efter at have aktiveret debugging for boost så jeg cmake ikke havde nogen mappe til at søge efter biblioteker, så jeg har forsøgt at indstille det manuelt. Jeg har netop installeret 3.11.1-versionen af ​​CMake, men det genkender stadig ikke regex biblioteket.

Bedste reference


Tilsyneladende er Boost\_LIBRARIES tom.
Du skal udtrykkeligt angive forstærkningskomponenter, du vil forbinde med i find\_package(Boost REQUIRED [COMPONENTS components]), for at de kan vises i Boost\_LIBRARIES.


I dit tilfælde skal det være find\_package(Boost REQUIRED COMPONENTS regex)


Se cmake-boost dokumentation: https://cmake.org/cmake/help/v3.8/module/FindBoost.html[8]