Suche…


Allgemeiner Ansatz zum Debuggen beim Erstellen mit Make

Angenommen, das make schlägt fehl:

$ make

Starten Sie es stattdessen mit make VERBOSE=1 , um die ausgeführten Befehle make VERBOSE=1 . Führen Sie dann direkt den Linker- oder Compiler-Befehl aus, den Sie sehen. Versuchen Sie, dies durch das Hinzufügen notwendiger Flags oder Bibliotheken zum Laufen zu bringen.

Überlegen Sie sich dann, was Sie ändern müssen, damit CMake die richtigen Argumente an den Compiler / Linker-Befehl übergeben kann:

  • Was muss im System geändert werden (welche Bibliotheken müssen installiert werden, welche Versionen und Versionen von CMake selbst)
  • Wenn vorherige fehlschlägt, welche Umgebungsvariablen oder Parameter an CMake übergeben werden sollen
  • Andernfalls ändern Sie die Änderungen in der CMakeLists.txt des Projekts oder in den Erkennungsskripten für Bibliotheken wie FindSomeLib.cmake

Um dies zu CMakeLists.txt , fügen Sie in CMakeLists.txt oder *.cmake message(${MY_VARIABLE}) *.cmake , um zu überprüfende Variablen zu debuggen.

Lassen Sie CMake ausführliche Makefiles erstellen

Sobald ein CMake-Projekt über project() initialisiert wurde, kann die Ausgabebosität des resultierenden Build-Skripts angepasst werden:

CMAKE_VERBOSE_MAKEFILE

Diese Variable kann beim Konfigurieren eines Projekts über die Befehlszeile von CMake festgelegt werden:

cmake -DCMAKE_VERBOSE_MAKEFILE=ON <PATH_TO_PROJECT_ROOT>

Für GNU make hat diese Variable den gleichen Effekt wie das Ausführen von make VERBOSE=1 .

Debuggen Sie find_package () -Fehler

Hinweis: Die angezeigten CMake-Fehlermeldungen enthalten bereits das Update für "Nicht-Standard" -Bibliothek / Tool-Installationspfade. Die folgenden Beispiele zeigen lediglich ausführlichere CMake find_package() .

CMake intern unterstütztes Paket / Modul

Wenn der folgende Code (ersetzen Sie das FindBoost Modul durch Ihr fragliches Modul )

cmake_minimum_required(VERSION 2.8)
project(FindPackageTest)

find_package(Boost REQUIRED)

gibt einen Fehler wie

CMake Error at [...]/Modules/FindBoost.cmake:1753 (message):
  Unable to find the requested Boost libraries.

  Unable to find the Boost header files.  Please set BOOST_ROOT to the root
  directory containing Boost or BOOST_INCLUDEDIR to the directory containing
  Boost's headers.

Und Sie fragen sich, wo Sie die Bibliothek gefunden haben. Sie können überprüfen, ob Ihr Paket eine _DEBUG -Option hat wie das Boost Modul, um ausführlichere Ausgaben zu erhalten

$ cmake -D Boost_DEBUG=ON .. 

CMake-fähiges Paket / Bibliothek

Wenn der folgende Code (ersetzen Sie den Xyz durch Ihre Xyz Bibliothek )

cmake_minimum_required(VERSION 2.8)
project(FindPackageTest)

find_package(Xyz REQUIRED)

gibts die etwas fehler wie

CMake Error at CMakeLists.txt:4 (find_package):
  By not providing "FindXyz.cmake" in CMAKE_MODULE_PATH this project has
  asked CMake to find a package configuration file provided by "Xyz", but
  CMake did not find one.

  Could not find a package configuration file provided by "Xyz" with any of
  the following names:

    XyzConfig.cmake
    xyz-config.cmake

  Add the installation prefix of "Xyz" to CMAKE_PREFIX_PATH or set "Xyz_DIR"
  to a directory containing one of the above files.  If "Xyz" provides a
  separate development package or SDK, be sure it has been installed.

Sie fragen sich, wo die Bibliothek CMAKE_FIND_DEBUG_MODE wurde. Sie können die undokumentierte globale Variable CMAKE_FIND_DEBUG_MODE , um eine ausführlichere Ausgabe zu erhalten

$ cmake -D CMAKE_FIND_DEBUG_MODE=ON ..


Modified text is an extract of the original Stack Overflow Documentation
Lizenziert unter CC BY-SA 3.0
Nicht angeschlossen an Stack Overflow