2010-09-28 12 views
58

Ich versuche, ein Projekt mit CMake zu konfigurieren, aber Boost-Bibliotheken können nicht gefunden werden, obwohl sie sich im angegebenen Ordner befinden. Ich habe Boost_INCLUDE_DIR, Boost_LIBRARYDIR und BOOST_ROOT angegeben, aber ich bekomme immer noch eine Fehlermeldung, dass CMake Boost nicht finden kann. Was könnte der Grund für einen solchen Fehler sein?Cmake findet Boost nicht

Antwort

81

Sind Sie sicher, dass Sie es richtig machen? Die Idee ist, dass CMake BOOST_INCLUDE_DIR, BOOST_LIBRARYDIR und BOOST_ROOT automatisch setzt. Tun Sie etwas, wie dies in CMakeLists.txt:

FIND_PACKAGE(Boost) 
IF (Boost_FOUND) 
    INCLUDE_DIRECTORIES(${Boost_INCLUDE_DIR}) 
    ADD_DEFINITIONS("-DHAS_BOOST") 
ENDIF() 

wenn Schub in einem Standardverzeichnis nicht installiert und kann somit nicht durch Cmake gefunden werden, können Sie sagen, cmake, wo sie suchen für Auftrieb wie folgt aus:

SET(CMAKE_INCLUDE_PATH ${CMAKE_INCLUDE_PATH} "C:/win32libs/boost") 
SET(CMAKE_LIBRARY_PATH ${CMAKE_LIBRARY_PATH} "C:/win32libs/boost/lib") 

natürlich diese beiden Linien haben vor die FIND_PACKAGE (Boost) in CMakeLists.txt

+26

Es ist '$ {Boost_INCLUDE_DIR}' nicht '$ {BOOST_INCLUDE_DIR}', Fall ist wichtig. –

+2

Vielleicht hat sich das in neueren Versionen von cmake geändert, aber hier ist die Referenzdokumentation: http://www.cmake.org/cmake/help/v3.0/module/FindBoost.html –

+2

es funktioniert nicht für mich ... Es findet die Boost-Bibliothek, erzeugt aber zur Kompilierungszeit Tonnen von Fehlern –

37

Es gibt mehr Hilfe die FindBoost.cmake Datei selbst durch das Lesen zur Verfügung stehen. Es befindet sich in Ihrem 'Modules' Verzeichnis.

Ein guter Start ist, zu setzen (Boost_DEBUG 1) - das wird eine Menge Informationen darüber ausspucken, wo Boost aussieht, wonach es sucht, und vielleicht erklären, warum es nicht gefunden werden kann.

Es kann Ihnen auch helfen, herauszufinden, ob es auf Ihrem BOOST_ROOT richtig abholt.

FindBoost.cmake hat manchmal auch Probleme, wenn die genaue Version von Boost nicht in den verfügbaren Versionsvariablen aufgeführt ist. Sie können mehr darüber finden, indem Sie FindBoost.cmake

lesen Schließlich hatte FindBoost.cmake einige Fehler in der Vergangenheit. Eine Sache, die du versuchen solltest, ist, eine neuere Version von FindBoost.cmake aus der neuesten Version von cmake zu nehmen und sie neben CMakeLists.txt in deinen Projektordner zu stecken - selbst wenn du eine alte Version von boost hast, wird sie die verwenden neue Version von FindBoost.cmake, die sich in Ihrem Projektordner befindet.

Viel Glück.

0

Noch ein Tipp für jeden, der versucht, CGAL insbesondere mit statisch verbundenen Boost zu bauen. Es ist nicht genug zu definieren ; es wird von der Zeit überschrieben Boost_DEBUG gibt seinen Wert aus. Die Sache, die Sie hier tun müssen, ist das Kontrollkästchen "Erweitert" zu aktivieren und CGAL_Boost_USE_STATIC_LIBS zu aktivieren.

2

Wenn Sie Ihren eigenen Auftrieb bauen nicht zu vergessen die --layout verwenden = versioniert sonst die Suche nach einer bestimmten Version der Bibliothek wird fehlschlagen

3

Ich hatte auch ein ähnliches Problem und entdecken, dass die BOOST_INCLUDE_DIR, BOOST_LIBRARYDIR und BOOST_ROOT env Variablen müssen absolute Pfade enthalten. HTH!

1

Für Cmake Version 3.1.0-RC2 Schub aufzunehmen 1,57 -D_boost_TEST_VERSIONS angeben = 1,57

Cmake Version 3.1.0-RC2 defaults < = 1.56.0 zu steigern, wie -DBoost_DEBUG = ON

mit gesehen

cmake -D_boost_TEST_VERSIONS = 1.57 -DBoost_DEBUG = ON -DCMAKE_BUILD_TYPE = Debug -DMAKE_C_COMPILER = clang -DCMAKE_CXX_COMPILER = 0 +++++

7

Ich habe selbst eine Weile mit diesem Problem gekämpft. Es stellte sich heraus, dass cmake nach Boost-Bibliotheksdateien suchte, wobei die Boost-Namenskonvention verwendet wurde, bei der der Bibliotheksname eine Funktion der Compiler-Version ist, die zum Erstellen verwendet wurde. Unsere Boost-Bibliotheken wurden unter Verwendung von GCC 4.9.1 erstellt, und diese Compiler-Version war tatsächlich auf unserem System vorhanden; Es wurde jedoch auch GCC 4.4.7 installiert. Wie es passiert, cmake FindBoost.cmake Skript war die automatische Erkennung der GCC 4.4.7 Installation anstelle der GCC 4.9.1 eins, und suchte daher nach Boost Bibliothek Dateien mit "gcc44" in den Dateinamen, anstatt "gcc49".

Die einfache Lösung bestand darin, Cmake zu zwingen, anzunehmen, dass GCC 4.9 vorhanden war, indem Boost_COMPILER auf "-gcc49" in gesetzt wurde. Mit dieser Änderung suchte und fand FindBoost.cmake meine Boost-Bibliotheksdateien.

1

Sie können auch die Version von Boost-angeben, die Sie CMake boost richtige Version auf den Standort der Header, indem -DBOOST_INCLUDEDIR oder -DBOOST_ROOT zeigen verwenden möchten

Beispiel:

cmake -DBOOST_ROOT=/opt/latestboost

Dies ist auch nützlich, wenn sich mehrere Boost-Versionen auf demselben System befinden.

0

Ich hatte das gleiche Problem beim Versuch, make für ein Projekt nach der Installation von Boost Version 1.66.0 auf Ubuntu Trusty64 laufen zu lassen. Die Fehlermeldung war ähnlich (nicht genau wie) diese:

CMake Error at  
/usr/local/Cellar/cmake/3.3.2/share/cmake/Modules/FindBoost.cmake:1245 (message): 
Unable to find the requested Boost libraries. 
Boost version: 0.0.0 
Boost include path: /usr/include 
Detected version of Boost is too old. Requested version was 1.36 (or newer). 
Call Stack (most recent call first): 
CMakeLists.txt:10 (FIND_PACKAGE) 

-Boost definitiv installiert wurde, aber CMake konnte es nicht erkennen. Nachdem er mit Wegen und Umgebungsvariablen viel Zeit bastelt, ich landete schließlich auf cmake sich für Optionen überprüft und fanden die folgende:

--check-system-vars  = Find problems with variable usage in system files 

Also lief ich folgendes in das Verzeichnis in Frage:

sudo cmake --check-system-vars

die zurückgegeben:

Also check system files when warning about unused and uninitialized variables. 
-- Boost version: 1.66.0 
-- Found the following Boost libraries: 
-- system 
-- filesystem 
-- thread 
-- date_time 
-- chrono 
-- regex 
-- serialization 
-- program_options 
-- Found Git: /usr/bin/git 
-- Configuring done 
-- Generating done 
-- Build files have been written to: /home/user/myproject 

und das Problem behoben.