2013-10-22 11 views
5

Wenn ich eine Anwendung unter Verwendung make uninstall deinstalliere, geht es über einige leere Verzeichnisse, die make install erstellt hatte, z. wie /usr/share/foo/ und dessen Unterverzeichnissen wie /usr/share/foo/applications usw.Wie bekomme ich 'make deinstallieren' um leere Verzeichnisse und Dateien zu entfernen?

ich über Google gefunden, dass auto des erzeugten uninstall Ziel nicht automatisch leere Verzeichnisse gelöscht werden, da sie nicht wissen, ob die die Anwendung besitzt die Verzeichnisse (zB es erstellt es während make install), oder geliehen es (zB das Verzeichnis existierte während make install).

Zur Zeit hat keine meiner Make-Dateien eine definitive uninstall Ziel, implizit scheint implizit zu machen, welche Dateien es entfernen muss. Wie kann ich es lehren, die betreffenden Ordner auch zu entfernen?

Antwort

4

Hier ist die Lösung, ich musste nur ein uninstall-hook Ziel wie folgt registrieren, und dann die notwendigen Aufgaben ausführen, um die Verzeichnisse zu entfernen. In diesem Beispiel würde ${pkgdatadir} zu /usr/share/foo erweitern. Das if-then ist erforderlich, da sonst das Ziel make distcheck fehlschlagen würde.

uninstall-hook: 
    if test -d ${pkgdatadir}/applications; then rmdir ${pkgdatadir}/applications; fi 
    if test -d ${pkgdatadir}; then rmdir ${pkgdatadir}; fi 

Die Regel uninstall-hook wird aufgerufen, nachdem das Deinstallationstarget ausgeführt wurde.

+0

Es ist nicht klar, wo Sie die Deinstallation-Hook registriert. Hast du dieses Segment an ein Makefile angehängt? Bitte etwas mehr ... – einpoklum

+0

Zu meiner Makefile.am Datei hinzugefügt, die Position spielt keine Rolle, fügen Sie sie einfach irgendwo am Ende hinzu. – lanoxx

2

Das obige ist übermäßig ausführlich. Hier ist eine kürzere Version:

Registrieren Sie ein Uninstall-Hook-Ziel, und führen Sie dann die erforderlichen Aufgaben zum Entfernen der Verzeichnisse. In diesem Beispiel würde $ {pkgdatadir} zu/usr/share/foo expandieren. Das Minuszeichen vor rmdir sagt make, den Rückgabecode zu ignorieren (so dass make nicht fehlschlägt, wenn das Verzeichnis nicht leer ist). Beachten Sie, dass das Minuszeichen vor jedem make-Zielbefehl verwendet werden kann.

uninstall-hook: 
    -rmdir ${pkgdatadir}/applications 
    -rmdir ${pkgdatadir} 

Die Regel uninstall-hook wird aufgerufen, nachdem das Deinstallationstarget ausgeführt wurde.

Hier ist mehr über das Minuszeichen: What do @, - and + do as prefixes to recipe lines in Make?

+0

Verzeihen Sie meine Ignoranz ... Geht das in 'configure.ac' oder' Makefile.am'? – jww

+0

Es geht in 'Makefile.am'! – Linas