46

我知道我可以編譯單個源文件,但有時候 - 比如編輯許多.cpp文件使用的頭文件 - 需要重新編譯多個源文件。這就是Build的用途。首先自動停止Visual C++ 2008編譯編譯錯誤?

VC9(Visual C++ 2008)中「Build」命令的默認行爲是嘗試編譯所有需要它的文件。有時這隻會導致許多失敗的編譯。我通常只是注意錯誤並按ctrl-break手動停止構建。

有沒有一種方法來配置它,以便自動停止在第一編譯錯誤(而不是第一個失敗的項目構建)?

+2

尊敬的人[未來](http://xkcd.com/979) - 在VS 2010+,試試[ StopOnFirstBuildError](http://visualstudiogallery.msdn.microsoft.com/91aaa139-5d3c-43a7-b39f-369196a84fa5)擴展 – brichins 2013-02-07 16:20:33

回答

25

我想出了一個更好的宏觀傢伙。它在第一個錯誤/秒之後立即停止(即將更新構建窗口)。

的Visual Studio - >工具 - >宏 - >宏IDE ...(或ALT + F11)

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 

希望工程出了你們。

1

this post - 如果它停靠在第一個錯誤的生成或在溶液中第一個失敗的項目不能確定。

Ctrl-break還會手動停止它。

現在,如果有某種方式可以阻止它在構建失敗後花10分鐘重建intelisense!

+0

但ctrl-break破壞當時正在創建的文件,因此您必須顯式重新編譯它們。 – Lev 2008-09-26 12:02:17

+2

鏈接中描述的方法在第一個PROJECT失敗時停止構建,而不是第一個編譯錯誤。 – jwfearn 2008-10-13 16:41:54

17

這可以通過添加一個響應事件OnBuildProjConfigDone運行的宏來完成。

宏如下:

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 
+0

此方法在第一個PROJECT失敗時停止構建,而不是第一個編譯錯誤。 – jwfearn 2008-10-13 16:47:37

+4

是的,但對我來說已經足夠接近了(而不是在停下來之前建設接下來的20個左右的項目)。 – jmatthias 2008-12-07 06:37:01

9

呀,這正常工作的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 
3

我知道這個問題是2008年的VS,但我碰到它跌跌撞撞尋找相同的答案VS 2012年時,由於宏是沒有在2012年得到更長時間的支持後,宏觀解決方案將不再適用。

您可以下載,顯然工作在VS 2010和2012年here的延伸。我可以肯定,它運作良好,在2012年VS

原路段的延伸在this響應給出。

1

您也可以下載this擴展,似乎爲Visual Studio的每個版本的工作