前段时间我在某处看到一个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_ENABLE
and 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
),并且会使该变量变得“珍贵”,configure
以便在构建系统时记录其值以供重用自动重新configure
s。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句