cmake
Test e debug
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 comeFindSomeLib.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 ..