我正在开发一个将与 GNU autoconf/automake 一起分发的项目,并且我有一组调用 awk 脚本的 bash 脚本。我希望 bash 脚本以 $PATH 结尾,而不是 awk 脚本。我应该如何将这些插入到项目中?是否应该将它们与其他二进制文件一起放入?
另外,有没有办法确定安装后文件的最终位置?我认为 /usr/local/bin 并不总是可执行文件的最终位置......
您可以只列出要在 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 变得有效。
将这样的内容添加到 Makefile.am
scriptsdir = $(prefix)/bin
scripts_DATA = awkscript1 awkscript2
在这种情况下,它将在 $(prefix)/bin 中安装 awkscript(您也可以使用 $(bindir))。
注意:不要忘记第一个应该命名为 name + dir (scripts -> scriptsdir),第二个应该命名为 name + _DATA (scripts -> scripts_DATA)。
乔纳森,回答你的额外问题:如果你想在构建时替换前缀的值,你需要:
像这样使用它:
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 将软件安装在我想要的位置。
您可以在 bash 脚本中嵌入 PREFIX 的值——实际上,您将“编译”脚本以包含安装位置。请注意构建测试期间的问题 - 您可能需要先定位相对于当前目录的脚本,然后再定位相对于 PREFIX 的脚本。