cmake 3.0.2 kann Boost unter 14.04 nicht finden

cmake 3.0.2 kann Boost unter 14.04 nicht finden

Ich habe das neueste cmake 3.0.2 aus den Quellen kompiliert und auch libboost-all-dev installiert. Und find_package(Boost) kann es nicht finden. Hier ist die Ausgabe von cmake:

Unable to find the requested Boost libraries.

Unable to find the Boost header files. Please set BOOST_ROOT to the root 
directory containing Boost of BOOST_INCLUDEDIR to the directory containing
Boost's headers.

Muss ich nach der Installation von Boost irgendwelche Variablen manuell festlegen, um es für cmake sichtbar zu machen?

Danke.

Antwort1

Welche Version libboost-all-devverwenden Sie? Ich gehe davon aus, dass Sie v1.53.0 verwenden.

Versuchen Sie libboost1.54-all-devstattdessen die Installation.

Antwort2

In 14.04 (und wahrscheinlich früher) bis 16.04 konnte ich Folgendes verwenden:

find_package( Boost COMPONENTS filesystem system REQUIRED )

include_directories(
    ${BOOST_INCLUDE_DIRS}
)

target_link_libraries(${PROJECT_NAME}
    ${Boost_FILESYSTEM_LIBRARY}
    ${Boost_SYSTEM_LIBRARY}
}

Wenn Sie nur die Header benötigen, müssen Sie keine Komponenten angeben und auch kein target_link_libraries():

find_package( Boost REQUIRED )

include_directories(
    ${BOOST_INCLUDE_DIRS}
)

Bei 16.10 musste ich die Installation unbedingt durchführen, libboost-all-devdamit mein Code unter Ubuntu weiterhin kompiliert werden konnte.

sudo apt-get install libboost-all-dev

Frühere Versionen funktionierten libboost-devirgendwie nur mit . Obwohl es so aussieht, als hätten Sie diesen Teil bereits herausgefunden, wollte ich nur sicherstellen, dass klar erwähnt wurde, dass es diesbezüglich kürzlich eine Änderung gab.

Antwort3

Danke, Rohith.

Als alternative Lösung habe ich die neueste Version von Boost heruntergeladen und erstellt und die Variable BOOST_ROOT in ~/.profile wie folgt hinzugefügt:

export BOOST_ROOT=$HOME/work/boost_1_57_0

Beachten Sie, dass Boost erstellt werden muss, wenn Sie seine Nicht-Header-Bibliotheken verwenden.

Antwort4

Ich erlebe in Ubuntu auch eine so unangenehme Situation …

Meine Lösung besteht darin, find_packagedie Bibliotheken einfach nicht zu verwenden, sondern im Verknüpfungsprozess einzufügen.

target_link_libraries( your_program boost_system boost_filesystem ... )

Das Schlechte ist, dass cmakedie Existenz der boostBibliothek nicht überprüft werden kann. Allerdings funktioniert sie einfach.

Hoffe, jemand findet eine bessere Lösung.

verwandte Informationen