2

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

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

4

4 回答 4

7

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

bin_SCRIPTS = 富吧

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

AC_CONFIG_FILES([foo bar])

然后在 foo.in 中:

#!/bin/sh

前缀=@前缀@
exec_prefix=@exec_prefix@
绑定=@绑定@
回声绑定 = $bindir

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

于 2012-01-24T22:22:47.153 回答
3

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

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

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

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

于 2008-09-18T16:38:40.587 回答
2

乔纳森,回答你的额外问题:如果你想在构建时替换前缀的值,你需要:

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

    AS_AC_EXPAND(BINDIR, $bindir)

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

请注意,您不应该直接使用 PREFIX,任何安装目录都可能被更改,因此您真的想使用传递给 bindir 配置的值并扩展它。

于 2008-10-01T07:57:23.910 回答
0

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

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

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

于 2008-09-18T16:40:02.300 回答