在使用 automake 的项目中,我应该使目录和可执行文件名称取决于包名称吗?

In a project using automake, should I make directory and executable names depend on the package name?

在我的 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 中已经有一个通用设施可以做这样的事情,并且这个设施将控制权放在在用户手中,它属于哪里。

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

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