Ich habe eine Boost-Header-Datei zu meinem Testprojekt mit CMakeLists.txt hinzugefügt. Meine some.cpp kann diesen Header ohne Fehler enthalten, aber ich kann nicht ausführen, da die Header-Datei offensichtlich auf anderen Boost-Headern beruht und die erforderlichen Dateien nicht findet. Der Speicherort meiner Dateien befindet sich im cpp-Ordner und die Boost-Dateien befinden sich in (C: \ boost)
einem Unterverzeichnis:
Android Studio: CMake findet keine Boost-Header-Dateien
.. \ src \ main \ cpp \ boost \ RequiredHeader.hpp.
Für den Include-Dateien in der "RequiredHeader" Compiler betrachtet:
.. \ src \ main \ cpp \ boost \ boost \ AnotherHeader.hpp.
CMakeLists.txt (boost-Teil)
# ADD BOOST
message("Import Boost...\n")
set(Boost_USE_STATIC_LIBS OFF)
set(Boost_USE_MULTITHREADED ON)
set(Boost_USE_STATIC_RUNTIME OFF)
set(Boost_INCLUDE_DIRS C:/boost_1_64_0/boost)
find_package(Boost 1.64.0)
if(Boost_FOUND)
message("Boost found! Link libraries...\n")
include_directories(${Boost_INCLUDE_DIRS})
target_link_libraries(myDependantLib ${Boost_LIBRARIES})
endif()
Ihre Hilfe wird sehr geschätzt!
Aktualisiert Frage:
Wie CMake sagen, wo meine Boost-Header-Dateien sind, da es immer noch nicht den richtigen Ort zu finden, mit BOOST_ROOT Set?
Aktualisiert CMakeLists.txt
# ADD BOOST
message("Add boost...\n")
set(Boost_USE_STATIC_LIBS OFF)
set(Boost_USE_MULTITHREADED ON)
set(Boost_USE_STATIC_RUNTIME OFF)
set(BOOST_ROOT C:/boost_1_64_0)
set(BOOST_INCLUDE_DIR C:/boost_1_64_0/boost)
FIND_PACKAGE(Boost 1.64.0 COMPONENTS foreach REQUIRED)
if(Boost_FOUND)
message("Boost found! Link libraries...\n")
target_link_libraries(calculator LINK_PUBLIC ${Boost_LIBRARIES})
endif()
Bei der Suche Header-Dateien, Compiler sieht nur diese Pfade **, die Sie ** für sie angeben (Ausnahme ist systemweite Header, aber es ist definitiv nicht Ihr Fall). Also, fügen Sie keine unnötigen Verzeichnisse ein. BTW, warum hast du * Boost_INCLUDE_DIRS * gesetzt, wenn 'find_packge (Boost)' es für dich einstellen sollte? – Tsyvarev
Ich habe die enthaltenen Verzeichnisse auskommentiert, aber nichts geändert. Ich habe meiner find_package-Anweisung ein "REQUIRED" hinzugefügt, um eine "nette Fehlermeldung" zu erhalten, falls [hier] vorgeschlagen wird (https://stackoverflow.com/questions/1065011/why-is-is-this-boost-header-file) -nicht eingeschlossen? rq = 1). Die Fehlermeldung, die es mir wirft, ist: "Kann die angeforderten Boost-Bibliotheken nicht finden. Die Boost-Headerdateien konnten nicht gefunden werden. Bitte setze BOOST_ROOT auf das root-Verzeichnis, das Boost oder BOOST_INCLUDEDIR enthält, in das Verzeichnis, das Boosts Header enthält. Ich habe versucht, diese Verzeichnisse zu setzen, war aber nicht erfolgreich ... –
Nun, so ** das eigentliche Problem ist "Boost nicht finden" kein Fehler beim Einbinden seines Headers wie in der Frage angegeben. 'Ich habe versucht, diese Verzeichnisse zu setzen, war aber nicht erfolgreich. - Zeigen Sie, was Sie versucht haben. Ersetzen Sie den Namen des tatsächlichen Boost-Headers nicht durch "RequiredHeader". – Tsyvarev