__TIMESTAMP__ liefert falsches Datum



  • SchlitzInDaHaus schrieb:

    Ja und was hergott nochmal steht DANN da? [...]

    MSDN ausm Link von oben schrieb:

    __TIMESTAMP__
    Das Datum und die Uhrzeit der letzten Änderung der aktuellen Quelldatei, ausgedrückt als Zeichenfolgenliteral im Format Ddd Mmm Date hh🇲🇲ss yyyy, wobei Ddd für den abgekürzten Wochentag steht und Date für eine ganze Zahl zwischen 1 und 31.

    und mit "aktuell" ist jeweils die gemeint, in der das Makro verwendet wird.

    Du bist wahrscheinlich auf der Suche nach __DATE__ und __TIME__ ...



  • Ich fasse kurz das wichtigste zusammen, was so auch im Manual steht:

    - __TIMESTAMP__ gibt den Zeitpunkt der letzten Änderung der Datei aus
    - bei der Datei handelt es sich um ein einziges File und zwar das in dem das Makro verwendet wird (meinetwegen "Spieler.cpp"
    - Erst wenn du aktiv eine Änderung in der Datei vornimmst und diese speicherst wird ein anderes Datum erzeugt



  • Swordfish schrieb:

    Du bist wahrscheinlich auf der Suche nach __DATE__ und __TIME__ ...

    Ja. Da hab ich dann Datum und Zeit einzeln. Aber dann ja auch wieder nur für die Datei, die zuletzt geändert wurde.

    inflames2k schrieb:

    Ich fasse kurz das wichtigste zusammen, was so auch im Manual steht:

    - __TIMESTAMP__ gibt den Zeitpunkt der letzten Änderung der Datei aus
    - bei der Datei handelt es sich um ein einziges File und zwar das in dem das Makro verwendet wird (meinetwegen "Spieler.cpp"
    - Erst wenn du aktiv eine Änderung in der Datei vornimmst und diese speicherst wird ein anderes Datum erzeugt

    Ja danke! Das passt dann zur Beobachtung.

    Was ich bräuchte halt ein Makro, welches den Zeitpunkt der Kompilierung des Gesamtprodukts festhält. Der Zeitpunkt soll hat für das Projekt gelten, um die Version im Workflow eindeutig zu identifizieren..



  • SchlitzInDaHaus schrieb:

    Swordfish schrieb:

    Du bist wahrscheinlich auf der Suche nach __DATE__ und __TIME__ ...

    Ja. Da hab ich dann Datum und Zeit einzeln. Aber dann ja auch wieder nur für die Datei, die zuletzt geändert wurde.

    Irgendwann reichts. RTFM!



  • Hä? Also irgendwas stimmt hier nicht. Ich bin mir nicht sicher ob's an mir liegt...

    Was ich brauchte ist: Den Zeitpunkt der Kompilierung des gesamten Projekts. Wie kriege ich das. Wenn das in dem Link steht, sehe ich es nicht.


  • Mod

    SchlitzInDaHaus schrieb:

    Hä? Also irgendwas stimmt hier nicht. Ich bin mir nicht sicher ob's an mir liegt...

    Alles Geisterfahrer, außer mir...



  • Ich finds nicht gut, was hier abgeht, aber ich steig mal drauf ein:

    Steht das was ich suche in dem Link?



  • Es kann diese Info "Zeitpunkt der Kompilierung des gesamten Projekts" als Präprozessor-Makro gar nicht geben, denn eine EXE wird aus einzelnen Objektdateien zusammengelinkt (und jede Objektdatei wird aus der entsprechenden Übersetzungseinheit (ÜE) erzeugt).
    Du müßtest von deinem Buildprozess her definieren, daß dann eine bestimmte ÜE immer neu erzeugt wird, sobald du eine neue EXE erzeugst.



  • Es ist mir im grunde egal ob es ein Makro oder sonstwas ist. Ich will ja einfach nur, dass sich eine Änderung der Codebasis in einer Änderung des Buildzeitpunktes niederschlägt.


  • Mod

    Dann darf diese Information logischerweise erst in der letzten Station des Buildprozesses eingepflegt werden. Das ist in der Regel das Linken. Jeder übliche Linker bietet die Möglichkeit, via Kommandozeile direkt Symbole zu definieren. Dann setzt du den Wert dieses Symbols auf die aktuelle Uhrzeit und fertig.

    Fürs nächste Mal bitte folgendes durchlesen und zu Herzen nehmen, anstatt eine Seite lang über die richtige Benutzung von __TIMESTAMP__ zu diskutieren, wenn dein Problem ein ganz anderes ist:
    http://www.perlmonks.org/?node_id=542341

    PS: In Erwartung offensichtlicher Folgefragen ein Minimalbeispiel:

    #include <time.h>
    #include <stdio.h>
    
    extern char TIMESTAMP;
    
    int main()
    {
      time_t timestamp = (time_t) &TIMESTAMP;
      printf("%s", ctime(&timestamp));
    }
    
    gcc -Wl,--defsym,TIMESTAMP=`date +%s` test.c
    

    Auf andere System, Sprachen oder Buildumgebungen bekommst du das selber angepasst.



  • Eine
    build.h

    #define BUILD_DATE_TIME __DATE__" "__TIME__
    

    build.cpp

    #include "build.h"
    

    mit einem Custom Pre-Build Step der build.obj löscht oder

    __TIMESTAMP__ wenn der Pre-Build Step das File touch ed (Windows: copy file /B+ ,,/Y ) wär auch noch möglich gwesn.


Anmelden zum Antworten