Ich versuche, ein Projekt mit CMake zu konfigurieren, aber es findet keine Boost-Bibliotheken, obwohl sie sich im angegebenen Ordner befinden. Ich habe angegeben Boost_INCLUDE_DIR
, Boost_LIBRARYDIR
und BOOST_ROOT
, aber ich erhalte immer noch eine Fehlermeldung, dass CMake Boost nicht finden kann. Was könnte der Grund für einen solchen Fehler sein?
85
Boost_INCLUDE_DIR
andere die FlaggeBoost_INCLUDEDIR
( ohne Unterstrich ). Sie können die richtige für Ihren Fall überprüfen, indem Sie dieFindBoost.cmake
Datei unterpath-to-cmake/Modules/FindBoost.cmake
find_package(Boost CONFIG)
Antworten:
Bist du sicher, dass du es richtig machst? Die Idee ist , dass CMake - Sets
BOOST_INCLUDE_DIR
,BOOST_LIBRARYDIR
undBOOST_ROOT
automatisch. Machen Sie so etwas inCMakeLists.txt
:Wenn Boost nicht an einem Standardspeicherort installiert ist und daher von CMake nicht gefunden werden kann, können Sie CMake mitteilen, wo nach Boost gesucht werden soll:
Natürlich müssen diese beiden Zeilen vor dem
FIND_PACKAGE(Boost)
Eingang stehenCMakeLists.txt
.quelle
${Boost_INCLUDE_DIR}
nicht der${BOOST_INCLUDE_DIR}
Fall.BOOST_INCLUDEDIR
' sein?Weitere Hilfe finden Sie, wenn Sie die
FindBoost.cmake
Datei selbst lesen . Es befindet sich in Ihrem 'Module'-Verzeichnis.Ein guter Anfang ist
set(Boost_DEBUG 1)
- dies wird eine Menge Informationen darüber ausspucken, wo Boost sucht, wonach es sucht, und kann helfen zu erklären, warum es ihn nicht finden kann.Es kann Ihnen auch helfen, herauszufinden, ob es Ihre
BOOST_ROOT
richtig aufnimmt.FindBoost.cmake
Manchmal treten auch Probleme auf, wenn die genaue Version von Boost nicht in den Variablen Verfügbare Versionen aufgeführt ist. Mehr dazu erfahren Sie beim LesenFindBoost.cmake
.Zuletzt
FindBoost.cmake
hatte einige Fehler in der Vergangenheit. Eine Sache, die Sie versuchen könnten, ist, eine neuere Version vonFindBoost.cmake
aus der neuesten Version von CMake zu nehmen und sie daneben in Ihren Projektordner zu stecken.CMakeLists.txt
Selbst wenn Sie eine alte Version von Boost haben, wird die neue Version vonFindBoost.cmake
in verwendet den Ordner Ihres Projekts.Viel Glück.
quelle
Ich hatte selbst eine Weile mit diesem Problem zu kämpfen. Es stellte sich heraus, dass
cmake
nach Boost-Bibliotheksdateien unter Verwendung der Namenskonvention von Boost gesucht wurde, bei der der Bibliotheksname eine Funktion der Compilerversion ist, mit der er erstellt wurde. Unsere Boost-Bibliotheken wurden mit erstelltGCC 4.9.1
, und diese Compiler-Version war tatsächlich auf unserem System vorhanden. wurde aberGCC 4.4.7
auch zufällig installiert. Zufällig erkannte dasFindBoost.cmake
Skript von cmake dieGCC 4.4.7
Installation anstelle der Installation automatischGCC 4.9.1
und suchte daher nach Boost-Bibliotheksdateien mit "gcc44
" in den Dateinamen anstelle von "gcc49
".Die einfache Lösung bestand darin, cmake zu zwingen, anzunehmen, dass GCC 4.9 vorhanden war, indem
Boost_COMPILER
auf "-gcc49
" in gesetzt wurdeCMakeLists.txt
. Mit dieser Änderung wurdenFindBoost.cmake
meine Boost-Bibliotheksdateien gesucht und gefunden.quelle
Sie können auch die Version von Boost angeben, die CMake verwenden soll, indem Sie die Position der Boost-Header für die richtige Version übergeben
-DBOOST_INCLUDEDIR
oder-DBOOST_ROOT
darauf verweisenBeispiel:
cmake -DBOOST_ROOT=/opt/latestboost
Dies ist auch nützlich, wenn sich mehrere Boost-Versionen auf demselben System befinden.
quelle
Ich hatte auch ein ähnliches Problem und stellte fest, dass die Variablen BOOST_INCLUDE_DIR, BOOST_LIBRARYDIR und BOOST_ROOT env absolute Pfade enthalten müssen. HTH!
quelle
Ich hatte das gleiche Problem beim Versuch,
make
ein Projekt auszuführen, nachdem ich Boost Version 1.66.0 unter Ubuntu Trusty64 installiert hatte. Die Fehlermeldung war ähnlich (nicht genau wie diese):Boost wurde definitiv installiert, aber CMake konnte es nicht erkennen. Nachdem ich viel Zeit damit verbracht hatte, an Pfaden und Umgebungsvariablen zu basteln, überprüfte ich mich schließlich
cmake
selbst nach Optionen und fand Folgendes:Daher habe ich im fraglichen Verzeichnis Folgendes ausgeführt:
sudo cmake --check-system-vars
welches zurückkehrte:
und löste das Problem.
quelle
Wenn Sie Ihren eigenen Boost erstellen, vergessen Sie nicht, den zu verwenden, da
--layout=versioned
sonst die Suche nach einer bestimmten Version der Bibliothek fehlschlägtquelle
Für cmake Version
3.1.0-rc2
holenboost 1.57
angeben-D_boost_TEST_VERSIONS=1.57
cmake version 3.1.0-rc2
Der Standardwertboost<=1.56.0
ist wie unter Verwendung von-DBoost_DEBUG=ON
cmake -D_boost_TEST_VERSIONS=1.57 -DBoost_DEBUG=ON -DCMAKE_BUILD_TYPE=Debug -DCMAKE_C_COMPILER=clang -DCMAKE_CXX_COMPILER=clang++
quelle
Noch ein Ratschlag für alle, die versuchen, CGAL mit statisch verknüpftem Boost zu erstellen . Es reicht nicht aus zu definieren
Boost_USE_STATIC_LIBS
; Es wird überschrieben, wenn die ZeitBoost_DEBUG
seinen Wert ausgibt. Hier müssen Sie das Kontrollkästchen "Erweitert" aktivieren und aktivierenCGAL_Boost_USE_STATIC_LIBS
.quelle
Vielleicht
wird dir helfen.
quelle