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 comme FindSomeLib.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 ..


Modified text is an extract of the original Stack Overflow Documentation
Sous licence CC BY-SA 3.0
Non affilié à Stack Overflow