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

281

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 has --debug, mais il ne semble pas être utile. Y a-t-il d'autres options? CMake fournit-il des indicateurs supplémentaires dans le Makefile généré à des fins de débogage?

Nils
la source
2
Ou, pour ajouter des termes de recherche, comment masquer les lignes de commande exécutées complètes et verbeuses et afficher uniquement une sortie colorée en pourcentage silencieuse et laconique.
ulidtko
Surensemble non CMake: stackoverflow.com/questions/5820303/…
Ciro Santilli 郝海东 冠状 病 六四 事件 法轮功
mkdir build; cd build; cmake .. --debug-output; make VERBOSE=1
parasrish

Réponses:

369

Lorsque vous exécutez make, ajoutez VERBOSE=1pour voir la sortie de commande complète. Par exemple:

cmake .
make VERBOSE=1

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

cmake -DCMAKE_VERBOSE_MAKEFILE:BOOL=ON .
make

Pour réduire certaines sorties potentiellement moins intéressantes, vous pouvez utiliser les options suivantes. L'option CMAKE_RULE_MESSAGES=OFFsupprime les lignes comme [33%] Building C object ... , alors que --no-print-directorymake n'imprime pas le répertoire courant en filtrant les lignes comme make[1]: Entering directoryet make[1]: Leaving directory.

cmake -DCMAKE_RULE_MESSAGES:BOOL=OFF -DCMAKE_VERBOSE_MAKEFILE:BOOL=ON .
make --no-print-directory
richq
la source
12
Ces solutions le rendent trop verbeux, imprimant beaucoup de CMake et rendent les internes qui ne sont pas intéressants. Existe-t-il un moyen d'afficher uniquement les commandes de compilation et de liaison (c'est-à-dire ce qui est généralement pertinent pour les problèmes de débogage). Peut-être même afficher uniquement la commande qui a échoué.
Tronic
Le top hit de Google recommande "si vous voulez voir uniquement les lignes de commande g ++, vous devez utiliser grep & Co. - si possible - en relation avec les Makefiles verbeux" . Peut-être que les développeurs ayant une grande expérience de cmake ont d'autres conseils.
Trevor Boyd Smith
7
Par ailleurs, si vous êtes sur une plate-forme qui le prend en charge, il cmake -GNinja . ; ninja -vaffiche une sortie verbeuse très agréable avec un minimum de peluches.
richq
11
Single line ...cmake --build . -- VERBOSE=1
letmaik
Apparemment, je dois travailler avec une version plus récente de cmake, car aucun makefile n'est trouvé dans mon répertoire de construction après avoir exécuté cmake ...
DrumM
80

Il est pratique de définir l'option dans le CMakeLists.txtfichier comme:

set(CMAKE_VERBOSE_MAKEFILE ON)
James Hirschorn
la source
3
Veuillez ne pas le faire pour vos propres projets. Tous vos utilisateurs ne voudront peut-être pas voir la sortie de votre version détaillée. Ne forcez pas tout le monde à consommer votre bibliothèque. CMAKE_VERBOSE_MAKEFILE devrait être désactivé par défaut et le choix d'un utilisateur, s'il en a besoin, à des fins de débogage.
Ela782
3
Alors? Vous pouvez toujours l'ajouter en tant que variable de cache si vous avez plusieurs développeurs et que vous souhaitez leur donner le choix. Mais oui, dans une version finale d'un projet, vous devriez le désactiver par défaut.
James Hirschorn
1
C'est une excellente option lorsque vous utilisez qt.io QtCreator car cmake est appelé par l'interface graphique. Je vous remercie!
Grant Rostig
9

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

makerj
la source
8

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

SteveL
la source
Comment puis-je définir cette option dans des fichiers texte, sans utiliser l'interface graphique?
osgx
4

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

Appelez make dans un répertoire propre et grep le drapeau que vous recherchez. Je cherche debugplutôt que ggdbj'écris.

make VERBOSE=1 | grep debug

Le -ggdbdrapeau était suffisamment obscur pour que seules les commandes de compilation apparaissent.

Alexander Griffith
la source