cmake
Test et débogage
Recherche…
Approche générale pour déboguer lors de la construction avec Make
Supposons que la make
échoue:
$ make
Lancez-le à la place avec make VERBOSE=1
pour voir les commandes exécutées. Ensuite, exécutez directement l'éditeur de liens ou la commande du compilateur que vous verrez. Essayez de le faire fonctionner en ajoutant les drapeaux ou les bibliothèques nécessaires.
Ensuite, déterminez les éléments à modifier, afin que CMake puisse transmettre des arguments corrects à la commande compiler / linker:
- quoi changer dans le système (quelles bibliothèques installer, quelles versions, quelles versions de CMake)
- si précédent échoue, quelles variables d'environnement définir ou paramètres à transmettre à CMake
- sinon, quoi changer dans
CMakeLists.txt
du projet ou les scripts de détection de la bibliothèque commeFindSomeLib.cmake
Pour vous aider, ajoutez des appels de message(${MY_VARIABLE})
dans CMakeLists.txt
ou *.cmake
pour déboguer les variables que vous souhaitez inspecter.
Laisser CMake créer des Makefiles verbeux
Une fois qu'un projet CMake est initialisé via project()
, la verbosité de sortie du script de génération résultant peut être ajustée via:
CMAKE_VERBOSE_MAKEFILE
Cette variable peut être définie via la ligne de commande de CMake lors de la configuration d'un projet:
cmake -DCMAKE_VERBOSE_MAKEFILE=ON <PATH_TO_PROJECT_ROOT>
Pour GNU, cette variable a le même effet que make VERBOSE=1
.
Déboguer les erreurs find_package ()
Remarque: Les messages d'erreur CMake affichés incluent déjà le correctif pour les chemins d'installation de bibliothèque / outil "non standard". Les exemples suivants illustrent simplement des sorties CMake find_package()
plus détaillées.
CMake pris en charge en interne Package / Module
Si le code suivant (remplace le module FindBoost
par votre module en question )
cmake_minimum_required(VERSION 2.8)
project(FindPackageTest)
find_package(Boost REQUIRED)
donne une erreur comme
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.
Et vous vous demandez où il a essayé de trouver la bibliothèque, vous pouvez vérifier si votre paquet a une option _DEBUG
comme le module Boost
a pour obtenir une sortie plus détaillée
$ cmake -D Boost_DEBUG=ON ..
CMake activé Package / Bibliothèque
Si le code suivant (remplace le Xyz
avec votre bibliothèque en question )
cmake_minimum_required(VERSION 2.8)
project(FindPackageTest)
find_package(Xyz REQUIRED)
donne une erreur comme
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.
Et vous vous demandez où il a essayé de trouver la bibliothèque, vous pouvez utiliser la variable globale CMAKE_FIND_DEBUG_MODE
non CMAKE_FIND_DEBUG_MODE
pour obtenir une sortie plus détaillée
$ cmake -D CMAKE_FIND_DEBUG_MODE=ON ..