Wie behandelt man vorkompilierte Header, die bei einem abgebrochenen Build zufällig beschädigt werden?

8

Ich verwende Visual C ++ 2012 mit einem Projekt, das stark vorkompilierte Header verwendet. So schwer, dass der berüchtigte / Zm Switch verwendet wird.

Wenn ich einen laufenden Build abbringe, erhalte ich diesen Fehler manchmal beim nächsten Build:

%Vor%

In neun von zehn Fällen werden die Dinge reibungslos ablaufen, aber wenn das passiert, muss ich die .pch finden und sie manuell löschen, bevor ich den Build neu starte.

Das nervt mich ein bisschen. Gibt es eine Möglichkeit, dies zu verhindern? Ein Patch von Microsoft? Oder eine Möglichkeit, Visual zu erzwingen, die .pch zu löschen und den Build automatisch neu zu starten, wenn das Problem auftritt? Oder an eine andere Lösung, an die ich nicht gedacht habe?

EDIT: Hier ist die Version von Visual, die ich ausführe:

%Vor%     
Laurent Couvidou 14.01.2014, 15:06
quelle

3 Antworten

0

Ich folgte Rockeyes Vorschlag, ein Muster in diesen beschädigten Dateien zu finden. Es stellt sich heraus, dass es sehr einfach ist: Gültige Dateien beginnen mit einem VCPCH0 Header, beschädigte Dateien nicht.

Ein einfaches C # -Programm, das als Pre-Build-Ereignis des / der fehlerhaften Projekts ausgeführt wird und das Löschen der beschädigten Dateien löst das Problem. Wenn jemand interessiert ist, ist die Quelle hier .

    
Laurent Couvidou 15.10.2014, 17:12
quelle
1

Das ist eine reine Vermutung, da ich nicht auf dieses Problem gestoßen bin.

Versuchen Sie herauszufinden, wie Visual eine .pch-Datei beschädigt ist (d. h. leere Datei, Datei nicht korrekt beendet, ...). Wenn es einem klaren Muster folgt, schreibe ein Pre-Build-Skript, das alle .pch analysiert und beschädigte löscht.

    
rockeye 15.01.2014 10:22
quelle
1

Ich würde ein Skript erstellen, das versucht, die stdafx.cpp -Datei neu zu kompilieren, aber dieses Mal mit dem PCH, anstatt es zu generieren. I.e. Das erwartete Ergebnis ist die erfolgreiche Kompilierung einer leeren Datei. Wenn dies fehlschlägt, löschen Sie den PCH. Führen Sie dieses Skript jetzt als Vorbereitungsschritt aus.

Es klingt ziemlich teuer, aber es ist sehr zuverlässig. Jedes Problem beim Laden des PCH verursacht seine Regeneration, sogar Compiler-Upgrades. Außerdem befindet sich Ihr PCH jetzt im Datei-Cache, was bedeutet, dass die tatsächliche Verwendung etwas billiger ist.

Dies könnte als ein NMAKE-Build-Skript mit etwas ungewöhnlichen Regeln implementiert werden.

    
MSalters 15.01.2014 10:37
quelle