Wie funktioniert die CMake verwenden, pkg-config, um Pakete zu finden?
Ich versuche zu bauen, ein Paket, das verwendet CMake für das Gebäude-system (d.h. libebur128), die sich auf pkg-config
zu finden, die benötigten Pakete in das system.
Nach dem Aufbau der erforderlichen Bibliotheken finde ich, dass CMake ist in der Lage zu finden, einer von Ihnen, aber die anderen nicht, obwohl Sie wurden gebaut in der gleichen Weise.
Wie kann ich wissen, was ist falsch? Gibt es eine Möglichkeit, um die Ausgabe der tests, die es tut oder so, wie es ist mit pkg-config
zum suchen der Pakete? Weil manuell mit pkg-config
funktioniert jedes mal Auffinden aller notwendigen Pakete.
Hier ist einer von den CMake-Skripten zu suchen, etwas, libmpg123 in diesem Fall:
find_package(PkgConfig)
pkg_check_modules(PC_MPG123 QUIET libmpg123)
find_path(MPG123_INCLUDE_DIR mpg123.h
HINTS ${PC_MPG123_INCLUDEDIR} ${PC_MPG123_INCLUDE_DIRS})
find_library(MPG123_LIBRARY NAMES mpg123 mpg123-0
HINTS ${PC_MPG123_LIBDIR} ${PC_MPG123_LIBRARY_DIRS})
set(MPG123_LIBRARIES ${MPG123_LIBRARY})
set(MPG123_INCLUDE_DIRS ${MPG123_INCLUDE_DIR})
include(FindPackageHandleStandardArgs)
find_package_handle_standard_args(MPG123 DEFAULT_MSG MPG123_LIBRARY MPG123_INCLUDE_DIR)
mark_as_advanced(MPG123_INCLUDE_DIR MPG123_LIBRARY)
Hinweis: ich bin cross-kompilieren für Windows im Falle, dass die Dinge, bin ich mit dem MinGW-w64 toolchain und ich habe eingestellt pkg-config
Pfade zu schauen, wo es sein sollte.
pkg_check_modules(GLIB REQUIRED glib-2.0>=2.0.0)
- und das ist es.Dein code sieht gut aus für mich. Kannst du mehr code, einschließlich einen Fall, wo es scheitert? Haben Sie vielleicht ein copy&paste-Fehler.
InformationsquelleAutor Kao Dome | 2013-10-11
Du musst angemeldet sein, um einen Kommentar abzugeben.
Falls jemand stolpert über diese, wie ich es Tat:
Hack in eine BOTSCHAFT fordert in Module/FindPkgConfig.cmake. Insbesondere vor dem execute_process call(s), wenn Sie sichern möchten, wie pkg-config aufgerufen wird.
Nun, wie ich, Sie möglicherweise überrascht sein, dass Ihre NACHRICHT nie passieren! Was ich gelernt habe, ist, dass, wenn cmake ruft pkg-config für ein bestimmtes Paket während der überprüfung der Abhängigkeiten für einige andere Paket auch früher in der timeline, dann die version, die es findet, ist zwischengespeichert in CMakeCache.txt die session-Persistenz. Dies bedeutet, dass, wenn Sie später kommen und update-Paket (weil einige andere Abhängigkeitsprüfung fehlschlägt), dann CMakeCache.txt hält immer noch den alten Wert und so trotz Sie ziehen Ihre Haare aus, cmake-Fehler aus, weil die version oder was auch immer ist nicht richtig.
Einfach put, delete CMakeCache.txt wenn Sie aktualisieren Sie alle Pakete, die als Teil des Bemühens, sich durch cmake-Fehler.
InformationsquelleAutor BrandonLWhite
Können Sie die Anzeige des Inhalts der Variablen mit dem der Befehl Nachricht und rufen Sie cmake mit:
Oder Sie können die Datei Bearbeiten
CMakeCache.txt
.Ich auch vorschlagen, dass Sie die folgende Zeile enthalten, so dass Sie sehen, was Los ist, während Sie zusammenstellen.
make VERBOSE=1
zu sehen, die volle kompilieren Befehle, auch wenn Sie nicht generieren, dieMakefile
mitCMAKE_VERBOSE_MAKEFILE
eingeschaltet.InformationsquelleAutor Fabien R