Ricerca…


Approccio generale per eseguire il debug quando si crea con Make

Supponiamo che la make fallisca:

$ make

Lanciatelo invece con make VERBOSE=1 per vedere i comandi eseguiti. Quindi esegui direttamente il comando linker o il compilatore che vedrai. Cerca di farlo funzionare aggiungendo le bandiere o le librerie necessarie.

Quindi scopri cosa cambiare, quindi CMake stesso può passare argomenti corretti al comando compiler / linker:

  • cosa cambiare nel sistema (quali librerie installare, quali versioni, versioni di CMake stessa)
  • se precedente fallisce, quali variabili d'ambiente impostare o parametri da passare a CMake
  • in caso contrario, cosa cambiare nel file CMakeLists.txt o negli script di rilevamento della libreria come FindSomeLib.cmake

Per aiutare in questo, aggiungi le chiamate del message(${MY_VARIABLE}) in CMakeLists.txt o *.cmake per eseguire il debug delle variabili che vuoi controllare.

Lascia che CMake crei Makefile dettagliati

Una volta che un progetto CMake viene inizializzato tramite project() , la verbosità di output dello script di build risultante può essere regolata tramite:

CMAKE_VERBOSE_MAKEFILE

Questa variabile può essere impostata tramite la riga di comando di CMake quando si configura un progetto:

cmake -DCMAKE_VERBOSE_MAKEFILE=ON <PATH_TO_PROJECT_ROOT>

Per GNU rendere questa variabile ha lo stesso effetto dell'esecuzione make VERBOSE=1 .

Debug find_package () errori

Nota: i messaggi di errore di CMake mostrati includono già la correzione per percorsi di installazione di librerie / strumenti "non standard". Gli esempi seguenti dimostrano solo find_package() CMake find_package() più dettagliati.

CMake Package / Module supportato internamente

Se il seguente codice (sostituire il modulo FindBoost con il modulo in questione )

cmake_minimum_required(VERSION 2.8)
project(FindPackageTest)

find_package(Boost REQUIRED)

dà qualche errore come

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.

E ti stai chiedendo dove ha provato a trovare la libreria, puoi controllare se il tuo pacchetto ha un'opzione _DEBUG come il modulo Boost ha per ottenere un output più dettagliato

$ cmake -D Boost_DEBUG=ON .. 

CMake ha abilitato il pacchetto / libreria

Se il seguente codice (sostituire il Xyz con la tua biblioteca in questione )

cmake_minimum_required(VERSION 2.8)
project(FindPackageTest)

find_package(Xyz REQUIRED)

dà qualche errore come

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.

E ti stai chiedendo dove ha provato a trovare la libreria, puoi usare la variabile globale non documentata CMAKE_FIND_DEBUG_MODE per ottenere un output più dettagliato

$ cmake -D CMAKE_FIND_DEBUG_MODE=ON ..


Modified text is an extract of the original Stack Overflow Documentation
Autorizzato sotto CC BY-SA 3.0
Non affiliato con Stack Overflow