使用GNU autoconf / automake在哪里放置辅助脚本?

使用GNU autoconf / automake在哪里放置辅助脚本?

Where to put helper-scripts with GNU autoconf/automake?

我正在开发一个将与GNU autoconf / automake一起分发的项目,并且我有一组bash脚本,它们称为awk脚本。 我希望bash脚本以$ PATH结尾,而不是awk脚本。 我应该如何将它们插入项目中? 是否应该将它们与其他二进制文件放在一起?

另外,有没有一种方法可以在安装后确定文件的最终位置? 我认为/ usr / local / bin并不总是在可执行文件最终出现的地方...


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

1
bin_SCRIPTS = foo bar

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

1
AC_CONFIG_FILES([foo bar])

然后在foo.in中:

1
2
3
4
5
6
#!/bin/sh

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

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


在Makefile.am中添加类似的内容

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

在这种情况下,它将在$ {prefix)/ bin中安装awkscript(您也可以使用$ {bindir))。

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


乔纳森(Jonathan),回答您的另一个问题:如果要在构建时替换prefix的值,则需要:

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

    AS_AC_EXPAND(BINDIR,$ bindir)

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

  • 请注意,您不应该直接使用PREFIX,任何安装目录都可以更改,因此您确实想使用传递的值来配置bindir并将其扩展。


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

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

    您可以将PREFIX的值嵌入到bash脚本中-有效地,您将"编译"脚本以包括安装位置。在构建测试期间要注意一些问题-您可能需要先相对于当前目录定位脚本,然后相对于PREFIX定位脚本。


    推荐阅读