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

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

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

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

Ответы [ 6 ]

26 голосов
/ 06 июля 2009

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

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 

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

17 голосов
/ 12 октября 2008

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

Да, это прекрасно работает на 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 голосов
/ 08 января 2014

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

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

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

1 голос
/ 01 сентября 2015

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

1 голос
/ 25 сентября 2008

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

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

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

...