2017-03-12 4 views
0

Hier ist, was ich versuche zu erreichen zu:Wie generiert man eine Liste von Dateien, die aus GNU kompiliert wurden, inkrementelle Builds?

Jedes Mal machen genannt wird, in meinem Makefile ich einen Anruf an ein Skript, das eine Flusen-Tool läuft. Ich möchte jedoch verhindern, dass lint die gesamte Codebasis erneut durchsucht, sondern nur gegen die Dateien, die inkrementell erstellt wurden. Wenn die Datei nicht neu kompiliert wurde, muss lint nicht erneut ausgeführt werden.

Ich weiß nicht, wie make überprüft, welche Dateien auf inkrementellen Builds neu kompiliert werden müssen. Ich denke nicht, dass das auch irgendwo als Liste gespeichert ist.

Wenn ich will nicht mit Skript machen wickeln, der seine Leistung protokolliert und analysiert dann später seine stdout, um zu sehen, welche Dateien neu kompiliert worden ist, gibt es eine andere Möglichkeit, diese inkrementellen Liste zu bekommen?

Antwort

1

Es ist mir nicht klar, warum Sie nur lint auf Dateien ausführen möchten, die bei diesem Aufruf von make veraltet waren. Was ist, wenn Sie make 5 mal ausführen und nur während der fünften das Lint-Tool erneut ausführen ... dann würden Sie nur die Dateien flinten, die während des fünften make-Laufs geändert wurden, aber Sie würden die während der Änderung geänderten Dateien nicht filtern die ersten vier Läufe.

Es scheint mir, als ob Sie wirklich alle Dateien löschen möchten, die seit dem letzten Mal, an dem Sie lint ausgeführt haben, geändert wurden. Dies ist trivial zu tun:

run-lint: $(SOURCES) 
     lint $? 
     @touch [email protected] 

Die $?automatic variable erweitert nur die Dateien, die neuer als die Zieldatei, dann nach den Flusen abgeschlossen ist ich die Zieldatei berühren, so ist es jetzt auf dem neuesten Stand. Jedes Mal, wenn Sie make run-lint ausführen, werden alle Dateien getippt, die seit der letzten Ausführung geändert wurden.

+0

Danke! Vielleicht war es nicht klar aus meiner Frage, aber das war genau das, was ich wollte (rennt nur für das Delta von dem letzten Mal, als es lief). Diese Lösung funktioniert wie vorgesehen. –

Verwandte Themen