Ich habe kürzlich eine mittelgroße Visual Studio 2005-Lösung in Visual Studio 2010 konvertiert. Eines der Projekte enthält Dateien, die keine C / C ++ - Dateien sind und mit einer Batch-Datei kompiliert werden, die ein benutzerdefiniertes Build-Tool ausführt. Die Ausgabe des benutzerdefinierten Erstellungsschritts ist einige C ++ - Dateien, die danach kompiliert werden müssen.
Die Ausgabe des benutzerdefinierten Erstellungsschritts in den Eigenschaften für die relevanten Dateien ist korrekt auf die generierten C ++ - Dateien eingestellt.
Das Problem ist, dass VS2010 manchmal versucht, die generierten C ++ - Dateien vor den Dateien mit dem benutzerdefinierten Build-Schritt zu kompilieren, was bedeutet, dass es in einem sauberen Build die C ++ - Dateien nicht finden kann und fehlschlägt. Wenn ich versuche, mehrere Male zu bauen, würde es schließlich die benutzerdefinierten Dateien kompilieren und dann wird der Build erfolgreich sein, aber das ist offensichtlich keine gute Lösung für den automatisierten Build.
In VS2005 gibt es kein Problem beim Erstellen dieses Projekts, aber VS2010 kann die korrekte Kompilierreihenfolge nicht anhand der Ausgaben des benutzerdefinierten Erstellungsschritts ermitteln. Gibt es eine andere Möglichkeit, die korrekte Kompilierreihenfolge in VS2010 zu erzwingen?
Visual Studio unterstützt parallele Builds, es kann mehr als ein Projekt gleichzeitig erstellen. Dies funktioniert nicht richtig, wenn die Abhängigkeiten zwischen Projekten nicht richtig angezeigt werden. Ein Custom Build kann hier sicherlich ein Unruhestifter sein. Die Anzahl der parallelen Builds ist konfigurierbar. Wenn Sie sie auf 1 setzen, wäre das eine grobe, aber effektive Problemumgehung. Extras + Optionen, Projekte und Lösungen, Erstellen und Ausführen, Einstellung "Maximale Anzahl paralleler Projekte".
Aber tu das nicht, parallele Builds können sehr viel Zeit sparen. Sie beheben diese Art von Problem, indem Sie Projektabhängigkeiten explizit festlegen. Klicken Sie mit der rechten Maustaste auf das Projekt, das die generierten C ++ - Dateien im Projektmappen-Explorer verwendet, und klicken Sie auf Projektabhängigkeiten. Aktivieren Sie das Kontrollkästchen für das Projekt, das die C ++ - Dateien erstellt. Falls es für andere Leser relevant ist, lesen Sie diese Antwort , um ein Projekt zu erstellen, das nur den benutzerdefinierten Build-Schritt ausführt und nichts anderes.
Visual Studio 2008 führt standardmäßig zuerst benutzerdefinierte Build-Tools aus. Die Reihenfolge kann über das Kontextmenü im Projekt mit dem Befehl "Tool Build Order" geändert werden. Diese Funktion ist in Visual Studio 2010 nicht verfügbar. Ich kenne keinen Workaround.
Erwägen Sie, Visual Studio 2010 "Eigenschaften & gt; & gt; Konfigurationseigenschaften & gt; & gt; Build-Ereignisse & gt; & gt; Pre-Build-Ereignis" als den Ort zu verwenden, an dem Sie Befehle zum Erstellen von Quelldateien ausgeben, die kompiliert werden müssen zuerst. Rufen Sie im Feld Befehlszeile den Compiler cl.exe auf oder verwenden Sie ein kleines externes Makefile, um diese Dateien zu kompilieren. Visual Studio wird dann den Rest Ihres Projekts nach diesem ersten Schritt kompilieren.
Ich habe mein Problem gelöst, als ich bemerkte, dass mein benutzerdefinierter Build-Schritt nur für jeweils eine Datei ausgeführt wurde. Es läuft für die nächste Datei auf dem nächsten Build usw. Der Grund ist anscheinend, dass meine benutzerdefinierten Build-Schritte eine Batch-Datei aufrufen und VS2010 eine temporäre Batch-Datei erstellt, um alle benutzerdefinierten Build-Dateien auszuführen. Die Lösung wurde in dieser Diskussion gezeigt: Ссылка Es ist einfach, alle Aufrufe an Batch-Dateien mit einer "Call" -Anweisung zu versehen, wodurch die Ausführung der Master-Batch-Datei nicht vorzeitig beendet wird.
Tags und Links visual-studio-2010 visual-c++-2010