【问题标题】:autotools not removing certain folders and files自动工具不删除某些文件夹和文件
【发布时间】:2014-07-02 14:21:22
【问题描述】:

我正在使用自动工具来打包我的软件并进行编译。我遇到的问题是,在安装过程中,我在 /etc/myapp 中创建了一个文件夹,并在该文件夹中放置了几个我需要的文件。此外,当我的软件运行时,我正在生成文件并将它们存储在同一位置(/etc/myapp)。当我执行“sudo make uninstall”时,最初使用“sudo make install”安装的所有文件都会从 /etc/myapp.xml 中删除。但是,软件生成并存储在同一位置的文件没有被删除,现在我留下了文件。

我应该在 Makefile.am 文件的哪个位置指定在卸载过程中删除整个 /etc/myapp 文件夹?

仅供参考,我使用的是 Ubuntu 12。

谢谢 D

【问题讨论】:

  • 当你说 /etc/myapp 时,你的真正意思是 $(datadir)/myapp$(pkgdatadir) 或类似的东西,对吧?您不能指定硬编码路径,因为必须允许用户在配置和/或制作时指定它们,否则您的包已严重损坏。当你的项目还很年轻时,这比在以后修复它要容易得多,所以在你走得太远之前把它做好是明智的。

标签: linux makefile autotools


【解决方案1】:

在您的Makefile.am 中,您可以创建一个名为uninstall-hook 的目标,它将删除您生成的文件:

uninstall-hook:
    rm -f $(DESTDIR)$(datadir)/my_generated_file $(DESTDIR)$(datadir)/my_other_generated_file

甚至:

uninstall-hook:
    rm -rf $(DESTDIR)$(datadir)

【讨论】:

  • 您好 jml,感谢您的回复。我去试试看!
  • @DavidNA 你可以将它添加到任何你想要的地方。但为了提高可读性,我认为最好将其添加到您定义 install 目标的位置附近。因此,对于大多数 automake 软件包,在 src/Makefile.am.
  • 哎呀,不!如果用户使用在其他地方设置的前缀或使用make DESTDIR=/some/other/path install 安装会发生什么? automake 的主要功能之一是用户可以指定目的地,并且文件可能不会在 /etc 中结束。如果包装不允许,那么它就坏了。
  • 或者更糟糕的是,如果用户在/etc/myapp 中安装了一些其他应用程序,而你只是把他们的东西吹走了怎么办?该用户会对这个包的维护者感到非常不满(这是正确的)。
【解决方案2】:

您的问题不仅仅涉及工具;它涉及政策。您正在创建什么类型的文件?如果它们在重新启动时会丢失,它们(可能)属于 /var/run/myapp。如果它们是数据文件,它们可能属于 $(prefix)/share/myapp。我说“可能”是因为它取决于平台和用户。大多数 debian 用户都希望将这些文件放在我上面提到的位置,但他们可能有理由将它们放在其他地方。重要的一点是它是用户的选择,而不是你的。作为包维护者,您不能选择 /etc/myapp。您需要配置您的包以使这些选择对用户可用。执行此操作的典型方法是使用 automake 的 _DATA 主变量以及 'sysconfdir'、'sharedstatedir'、'localstatedir' 和 'pkgdatadir' 系列变量。

【讨论】:

    猜你喜欢
    • 2015-08-14
    • 2014-12-13
    • 2012-03-06
    • 1970-01-01
    • 2017-09-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多