web-dev-qa-db-fra.com

Utiliser CMake avec GNU Make: Comment puis-je voir les commandes exactes?

J'utilise CMake avec GNU Make et je voudrais voir toutes les commandes exactement (par exemple, comment le compilateur est exécuté, tous les drapeaux, etc.).

GNU make a --debug, mais cela ne semble pas être utile. Existe-t-il d’autres options? CMake fournit-il des indicateurs supplémentaires dans le Makefile généré à des fins de débogage?

240
Nils

Lorsque vous exécutez make, ajoutez VERBOSE=1 pour afficher le résultat complet de la commande. Par exemple:

cmake .
make VERBOSE=1

Ou vous pouvez ajouter -DCMAKE_VERBOSE_MAKEFILE:BOOL=ON à la commande cmake pour obtenir une sortie de commande verbeuse permanente à partir des fichiers Makefiles générés.

cmake -DCMAKE_VERBOSE_MAKEFILE:BOOL=ON .
make

Pour réduire certaines sorties peut-être moins intéressantes, vous pouvez utiliser les options suivantes. L'option CMAKE_RULE_MESSAGES=OFF supprime les lignes telles que [33%] objet de bâtiment C ..., tandis que --no-print-directory indique à make de ne pas imprimer le répertoire actuel en filtrant les lignes telles que make[1]: Entering directory et make[1]: Leaving directory.

cmake -DCMAKE_RULE_MESSAGES:BOOL=OFF -DCMAKE_VERBOSE_MAKEFILE:BOOL=ON .
make --no-print-directory
331
richq

Il est pratique de définir l’option dans le fichier CMakeLists.txt comme suit:

set(CMAKE_VERBOSE_MAKEFILE ON)
65
James Hirschorn

Si vous utilisez l'interface graphique de CMake, passez à la vue avancée, puis l'option s'appelle CMAKE_VERBOSE_MAKEFILE.

7
SteveL

Ou exportez simplement la variable d’environnement VERBOSE sur le shell comme ceci: export VERBOSE=1

4
makerj

J'essayais quelque chose de similaire pour m'assurer que le drapeau -ggdb était présent.

Appelez make dans un répertoire vide et grep l'indicateur que vous recherchez. Vous recherchez debug plutôt que ggdb je voudrais simplement écrire.

make VERBOSE=1 | grep debug

Le drapeau -ggdb était suffisamment obscur pour que seules les commandes de compilation soient affichées.

2
Alexander Griffith