(Wir wissen nicht, Ihre gesamteMakefile
und Ihr voll Dateibaum, so ist dies nur eine Vermutung, ich nehme an, dass Sie uns ein Fragment gezeigt haben Ihre viel größer Makefile
)
However, after I run make, it automatically compile the c++ source code in that directory.
Dies passiert wahrscheinlich, weil Ihre $(shell find ~/lib -name "*")
zu etwas erweitert wird, das Ihre Objektdateien enthält. Da sie in Ihren Abhängigkeiten sind, wird ihre Quelldatei neu kompiliert, wenn sie neuer ist. BTW möchten Sie vielleicht stattdessen $(shell cd .. ; find lib -name "*")
verwenden oder wenn lib
kein Unterverzeichnis hat sogar $(wildcard ../lib/*)
Sie wahrscheinlich brauchen keine Abhängigkeit für das lib.tar.lzma
Ziel, so einfach haben:
lib.tar.lzma:
rm -f lib.tar.lzma
tar -cavf lib.tar.lzma -C ~/ lib/
BTW, dass -C ~/
vielleicht sollte -C $$HOME
seit make
verwenden /bin/sh
Befehle ausführen, und dass POSIX-Shell nicht über ~
wissen; vielleicht könnte ein -C ..
besser ...
Vielleicht könnten Sie einige Shell-Skript schreiben make-backup.sh
ein gescheiter tar
zu tun, und Sie würden dann Code
lib.tar.lzma: make-backup.sh
./make-backup.sh [email protected]
Aber vielleicht Sie Abhängigkeiten tun (zB wenn Sie einige generierte Dateien archivieren müssen). Dann müssen Sie sie explizit und weise auflisten (Sie wollen sicher nicht auf alle Dateien angewiesen sein; vielleicht nur auf die Quelldateien). Außerdem müssen Sie möglicherweise keine Objektdateien archivieren *.o
, wenn Sie einige (aber YMMV) haben.
Ich empfehle die Verwendung von make --trace
oder remake
-x
, um Ihr Makefile zu debuggen.
BTW, mit einem Makefile
nur für ein Backup ist nutzlos; schreibe stattdessen ein Shell-Skript.
Ich empfehle auch dringend einige Versionskontrollsystem (wie git) zu verwenden, wenn Sie keine verwenden. Beachten Sie, dass git
einen Unterbefehl archive
hat, der ein clevereres Backup sein könnte.
Vielen Dank für Ihre Antwort. Eigentlich muss ich Abhängigkeiten haben, um das Archiv zu aktualisieren. BTW, ich habe den folgenden Fehler:: Rezept für Ziel '/ home/xxx/lib/app' fehlgeschlagen –
Eigentlich gibt es implizite Regeln, und ich sollte eine Zeile .SUFFIXES hinzufügen, um sie zu deaktivieren. –