touch command in makefiles



  • Hallo,

    ich stoße in fremden makefiles immer wieder auf folgende Regel:

    clean:
    	touch _.o _~ 
    	/bin/rm -f *.o
    

    Was sie so ungefähr tut, kann ich mir auch vorstellen, aber wie funktioniert sie im Detail? Vor allen Dingen was sind _.o, _~ und *.o? Das alles sieht nach irgendwelchen Wildcards aus, aber woher kommen die? Aus der Unix-Shell selbst, den touch/rm-commands oder letztlich aus make?

    Wäre über etwas Aufklärung sehr dankbar. 🙂



  • Hier werden per touch einfach nur "Dummy"-Dateien erzeugt, welche dem Pattern entsprechen, welches "rm -f" übergeben wird.
    Einige Implementationen von rm geben einen Fehler zurück, wenn keine Dateien gelöscht wurden, weil es eben keine Dateien gab, die dem Suchmuster entsprachen.
    Damit aber make keinen Fehler meldet, wird durch touch dafür gesorgt, dass auf jeden Fall zumindest diese Dummy-Dateien zum Löschen zur Verfügung stehen.



  • Ah okay, also _.o ist dann so ein sinnloser Dateiname und *.o findet diesen dann natürlich?! So weit so gut, nur was bedeutet das _~ dann noch? Das erzeugt nämlich keine neue Datei. Wenn ich den touch-Befehl in einem Verzeichnis ausführe, gibts nur _.o


  • Mod

    banshee schrieb:

    Ah okay, also _.o ist dann so ein sinnloser Dateiname und *.o findet diesen dann natürlich?! So weit so gut, nur was bedeutet das _~ dann noch? Das erzeugt nämlich keine neue Datei. Wenn ich den touch-Befehl in einem Verzeichnis ausführe, gibts nur _.o

    Doch, das erzeugt auch eine Datei, du siehst sie nur nicht, da du wahrscheinlich angestellt hast, dass dir Dateien die auf '~' enden nicht angezeigt werden. '~' ist eine übliche Endung für temporäre Sicherheitskopien von Dateien, die zum Beispiel von vielen Texteditoren angelegt werden.



  • Ok, muss ich das nächste mal unter Linux mal nachsehen.

    Aber dann stellt sich mir die Frage, ob _.o nicht schon reicht? Vor allen Dingen wird _~ dann ja auch nicht von dem rm-command gefunden und bleibt dann bestehen?!


  • Mod

    banshee schrieb:

    Aber dann stellt sich mir die Frage, ob _.o nicht schon reicht?

    Ich vermute mal, dass in dem speziellen makefile später auch ein Kommando kommt, welches *~ entfernt. Oder dieses Makefile ist nicht besonders gut.

    Vor allen Dingen wird _~ dann ja auch nicht von dem rm-command gefunden und bleibt dann bestehen?!

    Wenn du meinst, dass Dateien mit '~' am Ende für rm unsichtbar wären, dann ist dem nicht so. Das ist eine einstellbare Konvention für ls, für alles andere sind das ganz normale Dateien.



  • SeppJ schrieb:

    Ich vermute mal, dass in dem speziellen makefile später auch ein Kommando kommt, welches *~ entfernt. Oder dieses Makefile ist nicht besonders gut.

    Dann scheint wohl letzteres der Fall zu sein. 😉
    Die Mecker von rm umgeht man doch auch schon mit dem ersten Dummy-file oder? Das zweite brauchts also im Prinzip gar nicht?!

    Wenn du meinst, dass Dateien mit '~' am Ende für rm unsichtbar wären, dann ist dem nicht so. Das ist eine einstellbare Konvention für ls, für alles andere sind das ganz normale Dateien.

    Nein, ich meine das Pattern '*.o' matched dann _~ nicht


Anmelden zum Antworten