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

lan*_*oxx 6 automake uninstall

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

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

目前我的make文件都没有确定的uninstall目标,隐式似乎知道它必须删除哪些文件.如何教它还删除有问题的文件夹?

lan*_*oxx 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
Run Code Online (Sandbox Code Playgroud)

uninstall-hook卸载目标运行后将调用该规则.


Lin*_*nas 5

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

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

uninstall-hook:
    -rmdir ${pkgdatadir}/applications
    -rmdir ${pkgdatadir}
Run Code Online (Sandbox Code Playgroud)

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

下面是关于减号的更多信息:@、- 和 + 作为 Make 中配方行的前缀做什么?