Автоматически останавливать сборку 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