make löscht Datei

  • Hi,


    ich hab nen Problem mit nem Makefile. Ich habe dieses simple Makefile:

    Code
    %.x: %.y
    	touch $@
    
    
    %.y:
    	touch $@


    Wenn ich nun ein

    Code
    make a.x

    ausführe bekomme ich diese Ausgabe:

    Code
    touch a.y
    touch a.x
    rm a.y


    Wo kommt nun das "rm a.y" her, und vor allem, wie kann ich das abstellen? Schließlich erstelle ich die Datei ja nicht, damit make die einfach wieder löscht...


    Claus

    MLD 5.5 mit vdr 2.6 - lirc yaUSBir - Octopus NET S2 - SCR - XFX GeForce 9300 mit Intel E3200 - 2GB RAM - WD Green 12TB HDD - SanDisk 64GB SSD - Lian Li PC-C37B - Samsung LE40A559
    MLD 5.5 mit vdr 2.4 - Raspberry Pi 3 - rpihddevice
    MLD 5.5 mit Squeeze Play - Raspberry Pi 2 - 32GB SD - 7" Touch TFT

  • Du hast in deinem Makefile ja keine Targets definiert sondern nur Rules. Mit deinem Make-Aufruf gibst du nur a.x als Target an, a.y willst du ja nicht. Eine Rule ist eben kein Target. Mit make -d kannst du sehen, dass er a.y als Zwischenergebnis wieder löscht.
    Machst du stattdessen make a.y a.x dann hast du 2 Targets und es wird nicht gelöscht.


    Ein richtiges Makefile würde so aussehen:


    .SUFFIXES: dient dazu die implizite Rule für Files mit der Extension .y zu deaktivieren.


    Hoffe das hilft dir irgendwie.


    Gerald


    HP Proliant MicroServer Gen8, Xeon E3-1230, 12 GB RAM, 3xWD red 2TB im RAID 5, 2xSundtek MediaTV Home DVB-C/T, L4M TWIN-C/T, Ubuntu Server 14.04.1, Plex Media Server
    Samsung UE55H6470

  • Danke!
    Das mit dem Unterschied zwischen targets und rules (zwischenergebnisse) war mir nicht bewusst. So macht das natürlich wieder Sinn.


    Claus

    MLD 5.5 mit vdr 2.6 - lirc yaUSBir - Octopus NET S2 - SCR - XFX GeForce 9300 mit Intel E3200 - 2GB RAM - WD Green 12TB HDD - SanDisk 64GB SSD - Lian Li PC-C37B - Samsung LE40A559
    MLD 5.5 mit vdr 2.4 - Raspberry Pi 3 - rpihddevice
    MLD 5.5 mit Squeeze Play - Raspberry Pi 2 - 32GB SD - 7" Touch TFT

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!