Build von Visual C++ 2008 beim ersten Kompilierungsfehler automatisch stoppen?
Lesezeit: 5 Minuten
jwfear
Ich weiß, dass ich einzelne Quelldateien kompilieren kann, aber manchmal – sagen wir, wenn Sie eine von vielen verwendete Header-Datei bearbeiten .cpp Dateien – mehrere Quelldateien müssen neu kompiliert werden. Dafür ist Build da.
Das Standardverhalten des „Build“-Befehls in VC9 (Visual C++ 2008) besteht darin, zu versuchen, alle Dateien zu kompilieren, die ihn benötigen. Manchmal führt dies nur zu vielen fehlgeschlagenen Kompilierungen. Normalerweise achte ich nur auf Fehler und drücke Strg-Pause, um den Build manuell zu stoppen.
Gibt es eine Möglichkeit, es so zu konfigurieren, dass der Build bei der stoppt allererster Kompilierungsfehler (nicht der erste fehlgeschlagene Projektbuild) automatisch?
Private Sub OutputWindowEvents_OnPaneUpdated(ByVal pPane As OutputWindowPane) Handles OutputWindowEvents.PaneUpdated
If Not (pPane.Name = "Build") Then Exit Sub
pPane.TextDocument.Selection.SelectAll()
Dim Context As String = pPane.TextDocument.Selection.Text
pPane.TextDocument.Selection.EndOfDocument()
Dim found As Integer = Context.IndexOf(": error ")
If found > 0 Then
DTE.ExecuteCommand("Build.Cancel")
End If
End Sub
Hoffe es klappt bei euch.
@ Eric, danke, das sieht nach einer guten Lösung aus, ich werde es versuchen. Weiß jemand, warum der Vorschlag von @Eric abgelehnt wurde?
– jwfear
6. Juli 09 um 18:50 Uhr
Laut meiner Reputationsseite wurde ich nicht heruntergestimmt. Ich weiß nicht.
– Eric Muyser
7. Juli 09 um 12:39 Uhr
Guter Versuch, und es funktioniert. Aber es flackert wie alles beim Bauen, also ist es nichts für mich. Wenn es nur eine Möglichkeit gäbe, den Text aus dem Ausgabefenster zu bekommen, ohne alles auswählen zu müssen …
– Dämonencodeaffe
23. April 10 um 14:06 Uhr
Sie müssen nicht alle auswählen verwenden; so etwas sollte man können bool found = pPane.TextDocument.StartPoint.CreateEditPoint().FindPattern(": error"). Es sollte hoffentlich auch schneller sein, da es nicht darauf angewiesen ist, den gesamten Text des Ausgabefensters bei jeder Bereichsaktualisierung herauszukopieren.
– Noah Richards
11. Juni 10 um 2:43 Uhr
@Noah Richards, danke fürs Wiegen! Ich konnte das nicht finden und entschied mich für SA. Wenn ich das nächste Mal VS starte, werde ich es versuchen und die Antwort aktualisieren.
– Eric Muyser
24. Juni 10 um 4:50 Uhr
Dies kann durch Hinzufügen eines Makros erfolgen, das als Reaktion auf das Ereignis OnBuildProjConfigDone ausgeführt wird.
Das Makro ist wie folgt:
Private Sub BuildEvents_OnBuildProjConfigDone(ByVal Project As String, ByVal ProjectConfig As String, ByVal Platform As String, ByVal SolutionConfig As String, ByVal Success As Boolean) Handles BuildEvents.OnBuildProjConfigDone
If Success = False Then
DTE.ExecuteCommand("Build.Cancel")
End If
End Sub
Diese Methode stoppt den Build beim ersten PROJEKT-Fehler, nicht beim ersten Kompilierfehler.
– jwfear
13. Oktober 08 um 16:47 Uhr
Ja, aber für mich ist das nah genug (im Gegensatz dazu, die nächsten 20 oder so Projekte zu bauen, bevor ich aufhöre).
– jmatthias
7. Dez. 08 um 6:37
Ich denke, es hängt davon ab, wie viele Dateien sich in einem Projekt befinden und was Sie kompilieren. Wenn ich eine überall enthaltene Datei ändere, kann dies einen ziemlich langen Neuaufbau auslösen, und wenn ich einen Tippfehler habe, möchte ich, dass mein Bau sofort gestoppt wird. Vielleicht kann VC10 (mit MSBuild) tun, was ich will.
– jwfear
27. Dezember 2008 um 1:55 Uhr
Das ist nicht das, wonach das Originalplakat gesucht hat, aber es ist genau das, wonach ich gesucht habe. Falls es nicht offensichtlich ist, fügen Sie dies hinzu, indem Sie zu Tools->Macros->Macros IDE gehen, EnvironmentEvents öffnen und es dort einfügen.
– mhenry1384
13. Januar 09 um 20:05 Uhr
Sie können DTE.ExecuteCommand(“View.ErrorList”) auch direkt nach DTE.ExecuteCommand(“Build.Cancel”) hinzufügen und es wird sofort das Fehlerlistenfeld angezeigt.
– Samuel
5. Juli 11 um 14:00 Uhr
Ja, das funktioniert gut auf MSVC 2005-2010:
Public Module EnvironmentEvents
Private Sub OutputWindowEvents_OnPaneUpdated(ByVal pPane As OutputWindowPane) Handles OutputWindowEvents.PaneUpdated
If Not (pPane.Name = "Build") Then Exit Sub
Dim foundError As Boolean = pPane.TextDocument.StartPoint.CreateEditPoint().FindPattern(": error")
Dim foundFatal As Boolean = pPane.TextDocument.StartPoint.CreateEditPoint().FindPattern(": fatal error")
If foundError Or foundFatal Then
DTE.ExecuteCommand("Build.Cancel")
End If
End Sub
End Module
Arbeitete für mich in VS 2008, danke. Eine Sache habe ich hinzugefügt, um die Fehlerliste zu öffnen DTE.Windows.Item(EnvDTE80.WindowKinds.vsWindowKindErrorList).Activate()
– Thomas
12. Oktober 11 um 17:44 Uhr
RKG
Ich weiß, dass die Frage für VS 2008 war, aber ich bin darüber gestolpert, als ich nach derselben Antwort für VS 2012 gesucht habe. Da Makros in 2012 nicht mehr unterstützt werden, funktionieren Makrolösungen nicht mehr.
Sie können eine Erweiterung herunterladen, die anscheinend in VS 2010 und 2012 funktioniert Hier. Ich kann bestätigen, dass es in VS 2012 gut funktioniert.
Der ursprüngliche Link zur Erweiterung wurde in dieser Antwort angegeben.
Martin Beckett
Es gibt dieser Beitrag – nicht sicher, ob der Build beim ersten Fehler oder beim ersten fehlgeschlagenen Projekt in einer Lösung angehalten wird.
Ctrl-break stoppt es auch manuell.
Nun, wenn es eine Möglichkeit gäbe, es daran zu hindern, 10 Minuten damit zu verbringen, Intelisense neu zu erstellen, nachdem ein Build fehlgeschlagen ist!
Aber ctrl-break beschädigt die Dateien, die zu diesem Zeitpunkt erstellt werden, sodass Sie sie explizit neu kompilieren müssen.
– Lew
26. September 2008 um 12:02 Uhr
Die im Link beschriebene Methode stoppt den Build beim ersten PROJEKT-Fehler, nicht beim ersten Kompilierungsfehler.
Liebe Leute aus Die Zukunft – Probieren Sie in VS 2010+ die StopOnFirstBuildError Verlängerung
– Brichins
7. Februar 13 um 16:20 Uhr