it-swarm.com.de

Cmake findet Boost nicht

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

66
Ivan Gromov

Bist du sicher, dass du es richtig machst? Die Idee ist, dass CMake BOOST_INCLUDE_DIR, BOOST_LIBRARYDIR und BOOST_ROOT automatisch setzt. Tun Sie so etwas in CMakeLists.txt:

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

wenn boost nicht an einem Standardspeicherort installiert ist und daher von cmake nicht gefunden werden kann, können Sie cmake mitteilen, wo nach boost zu suchen ist:

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

natürlich müssen diese beiden Zeilen vor der FIND_PACKAGE (Boost) in der CMakeLists.txt sein

87
fschmitt

Weitere Hilfe ist verfügbar, wenn Sie die FindBoost.cmake-Datei selbst lesen. Es befindet sich in Ihrem 'Modules'-Verzeichnis. 

Ein guter Anfang ist das Setzen von (Boost_DEBUG 1). Dadurch werden viele Informationen darüber ausgespäht, wo der Boost aussieht, wonach er sucht, und er kann erklären, warum er ihn nicht finden kann. 

Es kann auch helfen, herauszufinden, ob es richtig an Ihrem BOOST_ROOT hängt. 

FindBoost.cmake hat manchmal auch Probleme, wenn die genaue Version von boost nicht in den Variablen Available Available aufgelistet ist. Weitere Informationen hierzu finden Sie in FindBoost.cmake

Zu guter Letzt hatte FindBoost.cmake in der Vergangenheit einige Fehler. Eine Sache, die Sie versuchen könnten, ist, eine neuere Version von FindBoost.cmake aus der neuesten Version von cmake zu nehmen und sie zusammen mit CMakeLists.txt in Ihren Projektordner zu legen neue Version von FindBoost.cmake, die sich im Ordner Ihres Projekts befindet. 

Viel Glück. 

39
don bright

Ich hatte selbst eine Weile mit diesem Problem zu kämpfen. Es stellte sich heraus, dass cmake nach Boost-Bibliotheksdateien mit der Namenskonvention von Boost suchte, bei der der Bibliotheksname eine Funktion der Compiler-Version ist, mit der er erstellt wurde. Unsere Boost-Bibliotheken wurden mit GCC 4.9.1 erstellt, und diese Compilerversion war tatsächlich auf unserem System vorhanden. Es wurde jedoch auch GCC 4.4.7 installiert. Zufällig hat das FindBoost.cmake-Skript von cmake die GCC 4.4.7-Installation anstelle der GCC 4.9.1-Installation automatisch erkannt und suchte daher nach Boost-Bibliotheksdateien mit "gcc44" im Dateinamen und nicht nach "gcc49".

Die einfache Lösung bestand darin, zu zwingen, anzunehmen, dass GCC 4.9 vorhanden ist, indem Sie Boost_COMPILER in -gcc49 auf "CMakeLists.txt" setzen. Mit dieser Änderung hat FindBoost.cmake nach meinen Boost-Bibliotheksdateien gesucht und diese gefunden.

8
Tom P.

Ich hatte auch ein ähnliches Problem und entdeckte, dass die enov-Variablen BOOST_INCLUDE_DIR, BOOST_LIBRARYDIR und BOOST_ROOT absolute pfade .

3
sphakka

Sie können auch die Version von Boost angeben, die CMake verwenden soll, indem Sie -DBOOST_INCLUDEDIR oder -DBOOST_ROOT übergeben und auf die Position der korrekten Versionshub-Header verweisen

Beispiel:

cmake -DBOOST_ROOT=/opt/latestboost

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

3
Skillachie

Wenn Sie einen eigenen Boost erstellen, vergessen Sie nicht, --layout = versioned zu verwenden, andernfalls schlägt die Suche nach einer bestimmten Bibliotheksversion fehl

2
Gaetano Mendola

Für die cmake-Version 3.1.0-rc2, um die Verstärkung 1.57 aufzunehmen, geben Sie -D_boost_TEST_VERSIONS = 1,57 an

die cmake-Version 3.1.0-rc2 erhöht standardmäßig <= 1.56.0, wie mit -DBoost_DEBUG = ON zu sehen ist

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

1
Simon Allfrey

Ich hatte das gleiche Problem, als ich versuchte, make für ein Projekt auszuführen, nachdem Boost Version 1.66.0 unter Ubuntu Trusty64 installiert wurde. 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 wurde definitiv installiert, aber CMake konnte es nicht erkennen. Nachdem ich viel Zeit mit Pfaden und Umgebungsvariablen verbracht hatte, überprüfte ich schließlich cmake selbst nach Optionen und fand Folgendes:

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

Also habe ich in dem fraglichen Verzeichnis Folgendes ausgeführt:

Sudo cmake --check-system-vars

was zurückgegeben wurde:

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 gelöst.

0
user3006381

Noch ein kleiner Ratschlag für jeden, der/die gerade versucht, CGAL mit statisch verbundenem Boost zu bauen. Es reicht nicht aus, Boost_USE_STATIC_LIBS zu definieren. es wird überschrieben, wenn Boost_DEBUG seinen Wert ausgibt. Hier ist das Kontrollkästchen "Erweitert" zu aktivieren und CGAL_Boost_USE_STATIC_LIBS zu aktivieren.

0
Philip