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目标,隐式似乎知道它必须删除哪些文件.如何教它还删除有问题的文件夹?
这是解决方案,我只需要注册这样的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卸载目标运行后将调用该规则.
以上内容过于冗长。这是一个较短的版本:
注册一个卸载挂钩目标,然后执行必要的任务,以删除目录。在此示例中,${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 中配方行的前缀做什么?