Подтвердить что ты не робот

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

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

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

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

4b9b3361

Ответ 1

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

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 

Надеюсь, это сработает для вас, ребята.

Ответ 2

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

Ответ 3

Да, это отлично работает на 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

Ответ 4

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

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

Исходная ссылка на расширение была приведена в ответе this.

Ответ 5

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

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

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

Ответ 6

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