
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-dev
verwenden Sie? Ich gehe davon aus, dass Sie v1.53.0 verwenden.
Versuchen Sie libboost1.54-all-dev
stattdessen 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-dev
damit mein Code unter Ubuntu weiterhin kompiliert werden konnte.
sudo apt-get install libboost-all-dev
Frühere Versionen funktionierten libboost-dev
irgendwie 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_package
die Bibliotheken einfach nicht zu verwenden, sondern im Verknüpfungsprozess einzufügen.
target_link_libraries( your_program boost_system boost_filesystem ... )
Das Schlechte ist, dass cmake
die Existenz der boost
Bibliothek nicht überprüft werden kann. Allerdings funktioniert sie einfach.
Hoffe, jemand findet eine bessere Lösung.