Makefiles, VC++2003 und abgebrochene Kompiliervorgänge



  • Hi,

    ich habe hier ein altes Makefile, das für nmake und cl.exe aus VC++2003 gedacht ist. Ja, schon etwas älter das ganze. Dieses enthält unter anderem folgende Zeilen:

    Debug: Debug_DIR Debug_unfinished $(Debug_PCH) $(Debug_BIN)
    
    Debug_unfinished:
    	@ECHO.>Debug\unfinished.@
    	@FOR /F "delims=@" %i IN ('dir /b Debug\*.@') DO \
    		@IF EXIST "Debug\%i" DEL "Debug\%i"
    	@FOR /F %i IN ('dir /b Debug\*.@') DO \
    		@IF EXIST "Debug\%i" DEL "Debug\%i"
    
    .cpp{Debug}.obj:
    	@ECHO.>"$*.obj.@"
        $(CPP) /nologo $(Debug_CFLAGS) $(Debug_INCS) /Fo$*.obj /c $<
    	@DEL "$*.obj.@"
    

    Dazu 2 Fragen:

    a) Interpretiere ich das richtig, dass der Autor davon ausgeht, dass cl.exe bei einem Abbruch kaputte Objektdateien zurücklässt?

    b) Hat er Recht damit?

    Ich komme ja mehr aus der Unix-Welt, und da ist so eine Konstruktion absolut unüblich. Achja, kann mir jemand erklären, was diese {Debug}-Syntax bedeutet? Bezieht sich das auf das debug-Verzeichnis, in dem die Ausgabedateien liegen?



  • a) Keine Ahnung.

    b) MSVC produziert manchmal kaputte Object-Files. Was du mit "Abbruch" meinst ist mir nicht klar - Ctrl+C oder Bugs im Compiler/Linker/...? Was Ctrl+C angeht: keine Ahnung. Was Bugs angeht: ja, gibts. Manchmal gehen Object-Files putt. Manchmal so dass man einfach nur ein 2. Mal "build" drücken muss, manchmal so dass man die Object-Files von Hand löschen muss.

    Und... mit Object-Files mein' ich jetzt allgemein irgendwas was im "intermediate" Folder lander. Das inkrementelle Linken macht oft Probleme. Was auch gerne mal passiert ist dass irgend ein Hilfsprozess sich weghängt, und MSVC dann nen Fehler bezüglich PDB Files ausspuckt. In dem Fall muss man den entsprechenden Hilfsprozess abschiessen und dann nochmal probieren.

    Verstärkt treten solche Probleme auf wenn man mit /MP Compiliert und/oder mehrere Projekte gleichzeitig compiliert. Hab ich zumindest gelesen und deckt sich mit meiner Erfahrung.

    MSVC hat ein paar Macken, damit muss man leben. Oder halt andere Tools verwenden 🙂
    (Ich lebe gern damit, weil VS einfach ne geile Entwicklungsumgebung ist)

    Wobei ich mit MSVC 2005 arbeite. Der 2003er war aber was ich mich erinnere noch schlimmer verbuggt 🙂

    Zum Rest kann ich nix sagen - ich meide Makefiles wie die Beulenpest.


  • Mod

    Ich hatte noch nie kaptte Objekt-Dateien.

    Vielleicht möchte der Authornur garantieren, dass in einem Fehlerfall alle abhhänigen Dateien immer neu kompilert werden. Evtl. vertraut er dem Make Toool nicht 😉



  • Interessant. Der eine sagt ja, der andere nein. Watt denn nu? 😉

    @Martin: Ja, das war auch so mein Gedanke. Und wenn das stimmen würde, würd ich den Krempel natürlich einfach raushauen...


  • Mod

    Keine Anung was stimmt. Hustbaer wird aus seiner Erfahrung herus reden.

    Normalerweise wird nur eine OBJ Datei erzeugt, wenn der Compiler durch war...
    Ich habe definitv noch nie eine defekte OBJ-Datei gehabt,außer ich hatte einen grundsätzlich "interne Compilerfehler".



  • Ich glaube die "kaputten" .obj Files waren sogar genau 0 Byte gross. Ein normales "build" hat aber nicht gereicht, da anscheinend das Datum gestimmt hat, der Compiler daher nicht neu compiliert hat, und der Linker hatte dann nix zu linken.

    Hab' ich auch vor ein paar Wochen das erste mal gesehen.

    Probleme mit dem inkrementellen Linken oder den PDB-Files treten dagegen viel häufiger auf.

    ps: vielleicht war der Autor des Makefiles auch einfach nur paranoid, soll vorkommen 🙂


  • Mod

    hustbaer schrieb:

    ps: vielleicht war der Autor des Makefiles auch einfach nur paranoid, soll vorkommen 🙂

    Aus eigener Erfahrung würde ich sogar sagen: Nur paranoide Programmierer sind gut Programmierer! 🕶


Anmelden zum Antworten