2016-06-09 6 views
0

Ich benutze ein langes Build-Skript, das viele Projekte kompiliert, und für die meisten Builds make gibt es normalerweise make: Nothing to be done for 'all', was gut ist, weil ich nicht so viel Code auf jedem ändere bauen. Das Skript dauert jedoch immer noch sehr lange, da es autotools configure Skript für jedes Projekt und einige andere Skripts aufruft.Überspringen von Konfigurationen von Projekten, die nicht kompiliert werden müssen

Ich habe irgendwo gelesen, dass Zeitstempel verwenden, um zu testen, ob es erstellt werden muss.

Gibt es eine Möglichkeit, Make zu fragen, ob es erstellt werden muss oder nicht, bevor das configure Skript aufgerufen wird? Oder vielleicht eine andere Möglichkeit, die Neukonfiguration aller Projekte zu verhindern?

+1

Wie genau wird 'configure' ausgeführt? Es klingt so, als ob es entweder nicht als Teil des Makefiles ausgeführt werden muss oder dass es eine Abhängigkeit haben sollte, um zu verhindern, dass es ausgeführt wird, wenn es nicht benötigt wird. – chepner

+0

Sie haben Recht mit dem Konfigurationsskript. Es gibt jedoch andere Skripte, die ich gerne deaktivieren würde, wenn dieses Projekt nicht kompiliert werden muss. Bearbeitet die Frage – Nitay

+1

Nun, das gleiche gilt. Es scheint, dass Ihr Makefile einige Dinge bedingungslos ausführt, denen wirklich Abhängigkeiten zugewiesen werden sollten, so dass 'make' weiß, wann sie nicht ausgeführt werden müssen. – chepner

Antwort

3

Nachdem Sie jedes Projekt einmal konfiguriert haben, müssen Sie nicht jedes configure-Skript erneut ausführen, es sei denn, diese configure Skripts ändern sich, oder Sie haben Grund zu der Annahme, dass sich die Testergebnisse geändert haben. Bei Bedarf können Sie stattdessen config.status ausführen, um die Ausgabedateien neu zu erstellen, ohne alle Tests erneut auszuführen. Wenn Sie sicher sein können, dass die Ausgabedateien auch nicht neu erstellt werden müssen, können Sie einfach make ausführen. Wenn Sie Automake in Verbindung mit Autoconf verwenden, werden Ihre Makefiles mit Werkzeugen erstellt, die erkennen, wenn sich die m4-Quelle von configure, normalerweise configure.ac, geändert hat und daher eine Neukonfiguration erforderlich ist. Solange die Makefile generiert von Automake-basierte configure bleibt, können Sie einfach make ausführen, und es wird das Richtige tun. Wenn die Makefile fehlt, müssen Sie configure oder config.status trotzdem ausführen.

Darüber hinaus können Sie eine gemeinsam genutzte Cache-Datei für alle Ihre Konfigurationsskripts verwenden, indem Sie diese Datei über die Option --config-cache angeben. Das sollte die Zeit reduzieren, die jedes configure-Skript verbraucht, indem redundantes Testen vermieden wird.

Verwandte Themen