Автоматически останавливать сборку Visual C++ 2008 при первой ошибке компиляции?

Я знаю, что могу скомпилировать отдельные исходные файлы, но иногда - скажем, при редактировании файла заголовка, используемого многими .cpp файлы - несколько исходных файлов должны быть перекомпилированы. Вот для чего нужен Build.

Поведение по умолчанию команды "Сборка" в VC9 (Visual C++ 2008) - попытка скомпилировать все файлы, которые в ней нуждаются. Иногда это приводит к множеству неудачных компиляций. Я обычно просто наблюдаю за ошибками и нажимаю Ctrl-Break, чтобы остановить сборку вручную.

Есть ли способ настроить его так, что сборка останавливается при самой первой ошибке компиляции (не при первой неудачной сборке проекта) автоматически?

6 ответов

Решение

Я придумал лучшего макроса, ребята. Он останавливается сразу после первой ошибки / с (как только обновляется окно сборки).

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 

Надеюсь, у вас все получится, ребята.

Это можно сделать, добавив макрос, который запускается в ответ на событие 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

Да, это прекрасно работает на 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

Я знаю, что вопрос касался VS 2008, но я наткнулся на него, когда искал тот же ответ для VS 2012. Поскольку макросы больше не поддерживаются в 2012 году, решения для макросов больше не будут работать.

Вы можете скачать расширение, которое очевидно работает в VS 2010 и 2012 здесь. Я могу подтвердить, что это хорошо работает в VS 2012.

Оригинальная ссылка на расширение была дана в этом ответе.

Есть этот пост - не уверен, останавливает ли он сборку при первой ошибке или первом неудачном проекте в решении.

Ctrl-break также остановит его вручную.

Теперь, если есть какой-то способ остановить это, потратить 10 минут на восстановление intelisense после сбоя сборки!

Вы также можете скачать это расширение, похоже, работает для каждой версии Visual Studio

Другие вопросы по тегам