2015-11-19 1 views
1

Lorsque j'ai une règle avec plusieurs sorties en ninja, cela suppose que toutes les sorties ont été mises à jour et que toutes leurs dépendances ont été reconstruites, même si elles n'ont pas changé du tout.Éviter de reconstruire les dépendances des sorties inchangées

Cela arrive souvent avec une étape de génération de code, comme les générateurs d'analyseurs.

E.g. pour le générateur d'analyseur CITRON:

rule lemon 
    command = lemon $in 

build grammar.c grammar.h grammar.out: lemon grammar.y 

Si grammar.y est mise à jour, mais grammar.h ne change pas après l'exécution CITRON. LEMON détecte cela et ne met pas à jour le fichier. Pourtant, ninja reconstruit tout ce qui dépendait de grammar.h.

Comment puis-je empêcher cela?

Répondre

1

Ajoutez restat à votre règle. De l'documentation:

restat
Si présent, provoque Ninja re-stat les sorties de la commande après l'exécution de la commande. Chaque sortie dont l'heure de modification n'a pas été modifiée sera traitée comme si elle n'avait jamais été construite. Cela peut entraîner le retrait des dépendances inverses de la sortie de la liste des actions de construction en attente.

La règle devient:

rule lemon 
    command = lemon $in 
    restat = 1