Автоматически останавливать сборку Visual С++ 2008 при первой ошибке компиляции?
Я знаю, что могу скомпилировать отдельные исходные файлы, но иногда - скажем, при редактировании файла заголовка, используемого многими файлами .cpp
, необходимо перекомпилировать несколько исходных файлов. Для чего предназначена сборка.
Поведение по умолчанию команды "Build" в VC9 (Visual С++ 2008) заключается в попытке скомпилировать все файлы, которые в ней нуждаются. Иногда это просто приводит к множеству неудачных компиляций. Обычно я просто наблюдаю за ошибками и нажимаю ctrl-break, чтобы остановить сборку вручную.
Есть ли способ сконфигурировать его таким образом, что остановка сборки в самой первой компиляции ошибки (а не первая неудачная сборка проекта) автоматически?
Ответы
Ответ 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