在使用 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" 要做的不是使用程序转换,而是将版本号放入目录名称(和程序名称等)中。
在我的 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" 要做的不是使用程序转换,而是将版本号放入目录名称(和程序名称等)中。