【问题标题】:In a project using automake, should I make directory and executable names depend on the package name?在使用 automake 的项目中,我应该使目录和可执行文件名称取决于包名称吗?
【发布时间】:2015-04-21 21:42:26
【问题描述】:

在我的configure.ac 的第一行中,我需要告诉 autoconf 我的包的名称是什么:

AC_INIT([xjump], [2.8], [])

我应该尽量避免在我的代码中重复“xjump”名称,还是可以在需要时硬编码“xjump”?更具体地说:

1。对于 /var 中的目录

在我的安装脚本中,我需要在“/var”中创建一个目录。我应该使用

install-exec-hook:
    mkdir -p    @localstatedir@/@PACKAGE@
    touch       @localstatedir@/@PACKAGE@/highscores

或者我应该使用

install-exec-hook:
    mkdir -p    @localstatedir@/xjump
    touch       @localstatedir@/xjump/highscores

另外,现在当我运行make uninstall 时,高分文件保留在那里。我应该添加一个卸载钩子来删除它还是有办法自动处理它?

2。可执行文件名

现在我的可执行文件的名称是硬编码的

bin_PROGRAMS = xjump
xjump_SOURCES = game.c

有没有办法让它不存在?当我尝试运行它时出现以下错误:

# error: 'bin_PROGRAMS' contains configure substitution
bin_PROGRAMS = @PACKAGE@
@PACKAGE@_SOURCES = game.c 

3。手册页

与有关二进制文件的问题类似,有没有办法使手册页名称不被硬编码?

dist_man_MANS = xjump.6

【问题讨论】:

    标签: autoconf automake


    【解决方案1】:

    一般来说,您不应该这样做——不是因为这一定是一个坏主意,而是因为autoconf 中已经有一个通用设施来做这样的事情,而这个设施将控制权交给了用户,它属于哪里。

    要了解如何以用户身份使用它,请在 Autoconf 手册中搜索 --program-transform-name(和相关选项)。这些提供了一种在安装时重命名程序的方法。 Automake 会自动将这些转换应用到程序和其他一些可安装的对象上,无需您付出任何努力。 (这是 Automake 免费提供的众多附加功能之一。)

    现在,Automake 并非在所有情况下都应用此转换。有时您必须在Makefile.am 中手动操作。在您的问题中,这将适用于 /var 案例。我认为对于什么时候应该这样做,什么时候不应该这样做,没有一个硬性规定。通常这样做的一个原因是,如果您希望您的程序是“可并行安装的”——这意味着用户可能希望安装多个版本并同时彼此运行。但是,在这种情况下,“正常”的做法不是使用程序转换,而是将版本号放入目录名称(和程序名称等)中。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-07-23
      • 1970-01-01
      • 2011-03-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多