Je travaille sur un grand projet C++ construit avec CMake sur Linux. CMake fonctionne correctement, produisant une horde de Makefiles dans l'arborescence des modules et des applications. L'exécution de GNU make
entraîne des erreurs de l'éditeur de liens. Comment puis-je demander à make
d'imprimer les commandes exactes avant de les exécuter?
L'option -d n'imprime pas les commandes, mais de nombreuses informations qui n'ont pas été utiles.
L'option -n imprime toutes les commandes, mais ne les exécute pas, donc je ne peux pas dire où était exactement le problème. En examinant la sortie standard de make -n, je ne vois aucune commande pertinente. Je soupçonne que certaines commandes changent en fonction des résultats des commandes précédentes, et la hiérarchie des Makefiles rend difficile de dire ce qui se passe réellement.
Je ne vois aucune autre option dans la page de make man qui semble utile.
Je suis assez sûr que cela fonctionnera:
make VERBOSE=1
Vous devriez également pouvoir ajouter ceci à votre CMakeLists.txt pour définir de manière permanente que:
set(CMAKE_VERBOSE_MAKEFILE on)
Ceci est couvert dans la CMake FAQ .
Pour les Makefiles générés par automake, essayez:
make V=1
Une option, qui s'applique à GNU make et fonctionne avec n'importe quel Makefile, qu'il soit généré par CMake ou non, consiste à utiliser le --trace
option à faire. Cela affichera les commandes que make
exécute et les exécutera toujours.
Cela s'applique à toutes les commandes, pas seulement à celles qui VERBOSE=1
ou V=1
déclenche l'impression des makefiles générés par CMake/automake.
Et encore une autre alternative sous Linux est d'exécuter make under strace , comme strace -f -e trace=execve make <make options>
. La sortie de strace inclura chaque processus qui est exécuté: par make, par un script Shell qui fait courir, etc.
Par exemple, vous pourriez constater que le makefile généré par CMake exécute /usr/bin/cmake -E __run_co_compile <lots of options ...>
et je me demande encore quelles sont les invocations exactes du compilateur pour que cela s'exécute à son tour. Vous pouvez l'obtenir avec la méthode strace.