我如何获得'make uninstall'来删除空目录和文件?

时间:2013-10-22 14:54:45

标签: uninstall automake

当我使用make uninstall卸载某个应用程序时,它会留下make install创建的一些空目录,例如例如/usr/share/foo/及其子目录,例如/usr/share/foo/applications等。

我通过Google发现,automake生成的uninstall目标不会自动删除空目录,因为它不知道应用程序是否拥有目录(例如它在{{{}期间创建它1}}),或借用它(例如make install期间存在的目录)。

目前我的所有make文件都没有明确的make install目标,因此隐式似乎知道它必须删除哪些文件。如何教它还删除有问题的文件夹?

2 个答案:

答案 0 :(得分:7)

这是解决方案,我只需要注册这样的uninstall-hook目标,然后执行必要的任务,以删除目录。在此示例中,${pkgdatadir}将扩展为/usr/share/foo。 if-then是必要的,否则make distcheck目标会失败。

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

在卸载目标运行后将调用uninstall-hook规则。

答案 1 :(得分:5)

以上内容过于冗长。这是一个较短的版本:

注册卸载挂钩目标,然后执行必要的任务,以删除目录。在此示例中,$ {pkgdatadir}将扩展为/ usr / share / foo。 rmdir前面的减号告诉make忽略返回代码(这样如果目录不为空,make就不会失败)注意减号可以在任何make target命令前面使用。

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

在卸载目标运行后将调用uninstall-hook规则。

以下是关于减号的更多信息:What do @, - and + do as prefixes to recipe lines in Make?