如何让用户为 AutoConf 中的依赖项提供安装前缀?

程序员

前段时间我在某处看到一个configure脚本,可以指定依赖的安装前缀,但我不知道它在哪里,所以我请你告诉我如何实现这个。例子:

我有一个foo依赖于库的程序bar但是bar的安装前缀是/home/user/.local而不是/usr. 因此,虽然已安装,但configure将无法找到bar如何让用户提供configure包含依赖项的安装前缀的参数命令行可能如下所示:

~/foo$ ./configure --bar-dir=/home/user/.local

编辑:我在文档中找到了以下段落

--with-package

package将被安装,因此配置此包以与package 一起使用

[...]

不要使用“--with”选项来指定用于查找某些文件的文件名。这超出了 '--with' 选项的范围

好的,但是我什么"to specify the file name to use to find certain files"时候应该使用什么选项

约翰·博林格

尽管手册反对这种做法,但configure脚本通过--with选项支持这一点是比较常见的,因此适当的命令行采用以下形式:

    ~/foo$ ./configure --with-bar-dir=/home/user/.local

这种差异在很大程度上源于这样一个事实,即只有两种内置机制可以configure识别额外的命令行参数:AC_ARG_ENABLEand AC_ARG_WITH,它们提供具有相应特殊形式的参数。--with-xyzzy=...后者提供形式比前者提供形式更适合指定库目录--enable-xyzzy=...

例如,您可以在您的configure.ac

AC_ARG_WITH(
  [bar-dir],
  [AS_HELP_STRING(
    [--with-bar-dir=@<:@directory@:>@],
    [Specify directory as the location of libbar]
   )],
  [bar_ldflags="-L${withval}"]
)

请阅读文档(上面链接),因为我只介绍了AC_ARG_WITH它的作用。

您如何使用以这种方式接收到的数据取决于您还想做什么。您可以将它直接放入输出变量中,configure否则忽略它,但如果您正在使用AC_CHECK_LIBAC_SEARCH_LIBS检查库,则需要将其放入LDFLAGS这些测试中。LDFLAGS但是,它是一个用户变量,因此您不应对其进行永久性更改:

LDFLAGS_save=$LDFLAGS
LDFLAGS="${LDFLAGS} ${bar_ldflags}"
AC_CHECK_LIB([bar], [bar_init])
LDFLAGS=$LDFLAGS_save

这将与将标志bar_ldflags放入输出变量并写入Makefile.inMakefile.am使其包含在链接标志中相结合。


你还写:

好的,但是我什么时候应该使用什么选项"to specify the file name to use to find certain files"[如果我不使用--with参数]?

假设我们也拒绝--enable参数,Autoconf 提供的唯一其他选项是环境变量。如果你打算依赖一个环境变量,那么你可能想用AC_ARG_VAR()它来告诉 Autoconf。这将使您能够将其记录在configure的帮助文本中,将自动使其成为输出变量(没有显式AC_SUBST),并且会使该变量变得“珍贵”,configure以便在构建系统时记录其值以供重用自动重新configures。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章