当我使用make uninstall
卸载某个应用程序时,它会留下make install
创建的一些空目录,例如例如/usr/share/foo/
及其子目录,例如/usr/share/foo/applications
等。
我通过Google发现,automake生成的uninstall
目标不会自动删除空目录,因为它不知道应用程序是否拥有目录(例如它在{{{}期间创建它1}}),或借用它(例如make install
期间存在的目录)。
目前我的所有make文件都没有明确的make install
目标,因此隐式似乎知道它必须删除哪些文件。如何教它还删除有问题的文件夹?
答案 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?