在哪里使用GNU autoconf / automake放置helper-scripts?

时间:2008-09-18 16:28:40

标签: autoconf automake

我正在开发一个将与GNU autoconf / automake一起分发的项目,我有一组调用awk脚本的bash脚本。我希望bash脚本最终在$ PATH中,但不是awk脚本。我该如何将这些插入到项目中?它们应该与其他二进制文件一起使用吗?

另外,有没有办法在安装后确定文件的最终位置?我认为/ usr / local / bin不是总是可执行文件最终结束......

5 个答案:

答案 0 :(得分:7)

您只需列出要在Makefile.am中安装的脚本:

bin_SCRIPTS = foo bar

这将导致在make install期间安装foo和bar。要获取到最终位置的路径,可以在foo.in中使用@ bindir @并为您配置build foo。例如,在configure.ac中:

AC_CONFIG_FILES([foo bar])

然后在foo.in:

#!/bin/sh

prefix=@prefix@
exec_prefix=@exec_prefix@
bindir=@bindir@
echo bindir = $bindir

请记住,运行configure的人可以指定--prefix, - exec_prefix或 --bindir,可以使用DESTDIR重定向安装。使用此处描述的技术,不会考虑DESTDIR,并且脚本将安装在它将回显的路径之外的位置。这是设计上的,并且是正确的行为,因为通常使用DESTDIR安装来创建一个tarball,它最终将以脚本中的bindir变为有效的方式解压缩到文件系统中。

答案 1 :(得分:3)

将这样的内容添加到Makefile.am

scriptsdir = $(prefix)/bin
scripts_DATA = awkscript1 awkscript2

在这种情况下,它会在$(前缀)/ bin中安装awkscript(你也可以使用$(bindir))。

注意:不要忘记第一个应该命名为name + dir(scripts - > scriptsdir),第二个应该是name + _DATA(scripts - > scripts_DATA)。

答案 2 :(得分:2)

Jonathan,回答您的其他问题:如果您想在构建时替换prefix的值,则需要:

  1. 将脚本'myscript'重命名为'myscript.in'
  2. 为configure.ac添加规则以在底部生成它
  3. 使用我制作的名为AS_AC_EXPAND
  4. 的宏
  5. 像这样使用它:

    AS_AC_EXPAND(BINDIR,$ bindir)

  6. 在您的'myscript.in'中
  7. ,您现在可以使用@ BINDIR @,它将扩展到最终安装脚本的完整路径。

  8. 请注意,您不应该直接使用PREFIX,可能会更改任何安装目录,因此您确实希望使用传递给bindir的配置值并展开它。

答案 3 :(得分:0)

如果awk脚本不会进入主bin目录(前缀/ bin),那么你需要将它们放在适当的子目录中 - 可能是lib,但可能是libexec或share(因为awk脚本可能是平台中立)。

正确:软件不一定会以/ usr / local / bin结尾;在我的机器上,/ usr / local / bin由MIS管理,因此我安装的所有软件都在/ usr / gnu /下。我使用:./ configure --prefix = / usr / gnu将软件安装到我想要的位置。

您可以在bash脚本中嵌入PREFIX的值 - 实际上,您将“编译”脚本以包含安装位置。在构建测试期间要注意问题 - 您可能需要首先找到相对于当前目录的脚本,然后再相对于PREFIX找到脚本。

答案 4 :(得分:0)

Automake manual对此有一些建议。似乎首选方法是使用makefile而不是configure脚本生成脚本。