99 votes

Liste des objectifs/cibles dans GNU font

J'ai un fichier makefile assez grand qui crée un certain nombre de cibles à la volée en calculant les noms à partir de variables. (par exemple, foo $ (VAR): $ (PREREQS)). Est-il possible de convaincre gnu make de créer une liste de cibles après avoir élargi ces variables?

Je voudrais pouvoir obtenir les cibles pour un fichier Make aribitrary. J'essaie d'écrire une fonction d'achèvement pour mon shell.

113voto

todd hodes Points 721
<pre><code></code><p>Tirée de l’achèvement marque arg, qui fonctionne comme un charme.</p></pre>

78voto

Jack Kelly Points 9640

Pouvez-vous analyser le résultat de make -pn (c.-à-d. make --print-data-base --dry-run )? Il imprime toutes les variables, règles, règles implicites et quelles commandes seront exécutées avec beaucoup de détails.

14voto

Zdenik Points 101

Je ne suis pas sûr que ce soit seulement une chose géniale, mais cela fonctionne bien:

make help

10voto

Eric Melski Points 8325

Plusieurs intervenants ont suggéré l'utilisation d' make -pn, ce qui permet d'imprimer la base de données de règles, mais de ne pas exécuter quoi que ce soit -- plus ou moins. Le problème avec cette approche est que l' -n n'a toujours invoquer toutes récursive fait, et il n'a toujours beaucoup plus de travail que nécessaire, parce qu'il affiche chaque commande qu'il aurait invoqué dans un build. Une solution plus efficace serait de créer un trivial makefile, le mannequin.mk, avec ce contenu:

__all_targets__: ; #no-op

Maintenant invoquer faire comme make -p -f Makefile -f dummy.mk __all_targets__. Sur toute importante de construction, la différence dans le montant de la sortie générée par faire est important. Par exemple:

$ gmake -pn | wc
 138985 2632330 69612711
$ gmake -f Makefile -f /tmp/dummy.mk -pn __all_targets__ | wc
  21673   93437  878985

Le temps d'exécution est nettement mieux ainsi -- 2.063 s pour la première version, 0.059 s pour le second.

9voto

js. Points 1026

Vérifiez l' achèvement de bash pour make sur le serveur Debian.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X