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

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

有帮助吗?

解决方案

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

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

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

笔记:不要忘记第一个应该命名为 name + dir (scripts -> scriptdir),第二个应该命名为 name + _DATA (scripts -> script_DATA)。

其他提示

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

bin_SCRIPTS = foo bar

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

AC_CONFIG_FILES([foo bar])

然后在 foo.in 中:

#!/bin/sh

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

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

乔纳森,回答你的附加问题:如果您想在构建时替换 prefix 的值,您将需要:

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

    AS_AC_EXPAND(BINDIR, $bindir)

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

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

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

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

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

有一些关于此的建议 汽车制造手册. 。似乎首选方法是使用 makefile 而不是使用配置脚本生成脚本。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top