Frage

Für die meisten meiner Entwicklungsarbeit mit Visual C ++, ich bin mit teilweise aufbaut, z.B. Presse F7 und nur C ++ geänderte Dateien und die Abhängigkeiten erhalten wieder aufgebaut, um einen inkrementalen Link gefolgt. Bevor Sie eine Version auf Prüfung vorbei, nehme ich vorsorglich eine vollständige Wiederherstellung zu tun, die etwa 45 Minuten auf meinem aktuellen Projekt übernimmt. Ich habe viele Beiträge und Artikel befürworten diese Aktion gesehen, aber Wunder, ist dies notwendig, und wenn ja, warum? Ist es für die gelieferte EXE oder das dazugehörige PDB (die wir auch beim Testen verwenden will)? Kann die Software-Funktion anders aus der Perspektive des Testens?

Für Release-Builds, ich bin mit VS2005, inkrementale Kompilierung und Verknüpfung, vorkompilierte Header.

War es hilfreich?

Lösung

Hat nicht jeder über diese Nutzungsmuster kommen? Ich bekomme seltsame Buildfehler, und noch bevor die Untersuchung ich eine komplette Kompilierung und das Problem weggeht.

Das allein scheint mich Grund genug zu sein, um ein voll vor einem Release wieder aufbauen zu tun.

Ob Sie bereit wäre, eine schrittweise Entwicklung zu machen, die über dem Test ohne Probleme abgeschlossen ist, ist eine Frage des Geschmacks, denke ich.

Andere Tipps

Der Teil Build-System funktioniert durch die Dateidaten von Quelldateien gegen die Build-Ergebnisse zu überprüfen. So kann es, wenn Sie brechen z.B. eine frühere Datei aus der Quellcodeverwaltung wiederherzustellen. Die frühere Datei hätte ein geändertes Datum früher als das Build-Produkt, so würde das Produkt nicht wieder aufgebaut werden. Zum Schutz vor diesem Fehler, sollten Sie einen vollständigen Build tun, wenn es eine endgültige Build ist. Während Sie allerdings entwickeln, inkrementelle Builds sind natürlich viel effizienter.

Edit:. Und natürlich macht eine vollständige Wiederherstellung auch schützt Sie vor möglichen Fehlern in der inkrementellen Build-System

Das grundlegende Problem ist, dass Zusammenstellung auf der Umwelt abhängig ist (Befehlszeilen-Flags, Bibliotheken zur Verfügung, und wahrscheinlich einig Black Magic), und so zwei Compilations nur das gleiche Ergebnis haben, wenn sie unter den gleichen Bedingungen durchgeführt werden. Für die Prüfung und Bereitstellung, wollen Sie sicherstellen, dass die Umgebungen werden so weit wie möglich kontrolliert und Sie sind nicht verrückt Verhalten aufgrund ungeradeen Code zu bekommen. Ein gutes Beispiel ist, wenn Sie eine Systembibliothek aktualisieren, dann die Hälfte der Dateien neu kompiliert werden - die Hälfte ist immer noch den alten Code zu verwenden versuchen, die Hälfte ist es nicht. In einer perfekten Welt würde dies entweder Fehler sofort oder keine Probleme verursachen, aber leider manchmal keiner von denen geschehen. Als Ergebnis vermeidet mit einem gestaffelten Build zugeordnet Prozess eine Menge Probleme eine komplette Neuübersetzung zu tun.

Ich würde es auf jeden Fall empfehlen. Ich habe auf einer Reihe von Gelegenheiten mit einer großen Visual C ++ Lösung der Abhängigkeitsprüfung nicht gesehen einige Abhängigkeit von geändertenem Code holen. Wenn diese Änderung zu einer Header-Datei, die die Größe eines Objekts sehr seltsame Dinge bewirkt beginnen können passieren. Ich bin sicher, dass die Abhängigkeitsprüfer hat in VS 2008 besser geworden, aber ich würde es immer noch nicht für eine Release-Build vertrauen.

Der wichtigste Grund dafür nicht eine schrittweise verknüpft binär zu versenden ist, dass einige Optimierungen deaktiviert sind. Der Linker wird verlassen Polsterung zwischen den Funktionen (um es einfacher zu machen, sie auf dem nächsten Teil Link zu ersetzen). Dies fügt einige aufblasen dem binären. Es kann auch zusätzliche Sprünge sein, was die Speicherzugriffsmuster ändert und kann dazu führen, zusätzliches Paging und / oder Cache-Misses. Ältere Versionen von Funktionen können weiterhin in der ausführbaren Datei wohnen, obwohl sie nie genannt. Dies führt auch zu binärem aufblasen und langsame Leistung. Und Sie können sicher nicht Link-Zeitcodegenerierung mit inkrementellem Verknüpfen verwenden, so dass Sie auf weitere Optimierungen zu kurz kommen.

Wenn Sie ein Debug-Build zu einem Tester geben, dann wahrscheinlich es keine große Sache ist. Aber Ihre Release-Kandidaten sollten von Grund auf neu im Release-Modus eingebaut werden, vorzugsweise auf einer dedizierten Maschine zu bauen mit einer kontrollierten Umgebung.

Visual Studio hat einige Probleme mit teilweise (inkrementell) baut, (I meist sind Fehler aufgetreten Verlinken) Von Zeit zu Zeit ist es sehr nützlich, eine vollständige Wiederherstellung zu haben.

Bei langen Übersetzungszeiten gibt es zwei Lösungen:

  1. Verwenden Sie ein paralleles Zusammenstellung Tool und nutzen Sie Ihre (angenommen) Multi-Core-Hardware.
  2. Verwenden Sie eine Maschine zu bauen. Was ich am meisten ist eine separate Maschine zu bauen, mit einem CruiseControl- einrichten, die voll Modernisierungen von Zeit zu Zeit durchführt. Die „offizielle“ Version, die ich zum Testteam zur Verfügung stellen, und schließlich an den Kunden wird immer von der Maschine zu bauen genommen, nicht von der Entwickler-Umgebung.
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top