6

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

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

目前我的 make 文件都没有明确的uninstall目标,make 似乎隐含地知道它必须删除哪些文件。我怎样才能教它也删除有问题的文件夹?

4

2 回答 2

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规则将在卸载目标运行后调用。

于 2013-10-22T15:44:37.380 回答
5

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

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

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

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

以下是关于减号的更多信息:@、- 和 + 作为 Make 中配方行的前缀有何作用?

于 2017-02-12T11:59:36.190 回答