如何解决如何让用户为 AutoConf 中的依赖项提供安装前缀? --with-package
前段时间在某处看到一个configure脚本,可以指定依赖项的安装前缀,但是不知道是哪里,所以请教各位如何实现。示例:
我有一个依赖于库 foo
的程序 bar
。但是 bar
的安装前缀是 /home/user/.local
而不是 /usr
。因此,configure
将无法找到 bar
,尽管它已安装。如何让用户向 configure
提供包含依赖项安装前缀的参数?命令行可能如下所示:
~/foo$ ./configure --bar-dir=/home/user/.local
EDIT:我在 the docs
中发现了以下段落--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_ENABLE
和 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_LIB
或 AC_SEARCH_LIBS
检查库,则需要将其放入LDFLAGS
用于这些测试。但是,LDFLAGS
是一个用户变量,因此您不应对其进行永久性更改:
LDFLAGS_save=$LDFLAGS
LDFLAGS="${LDFLAGS} ${bar_ldflags}"
AC_CHECK_LIB([bar],[bar_init])
LDFLAGS=$LDFLAGS_save
这将与将 bar_ldflags
中的标志放入输出变量并写入 Makefile.in
或 Makefile.am
以使其包含在链接标志中相结合。
你还写道:
好的,但是我应该什么时候使用 "to specify the file name to use to find certain files"
[如果我不使用 --with
参数]?
假设我们也拒绝 --enable
参数,Autoconf 提供的唯一其他选项是环境变量。如果您打算依赖环境变量,那么您可能想使用 AC_ARG_VAR()
来告诉 Autoconf。这将使您能够将其记录在 configure
的帮助文本中,将自动使其成为输出变量(没有显式 AC_SUBST
),并且会使变量变得“珍贵”,例如 {{ 1}} 将在构建系统自动重新configure
时记录其重用价值。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。