![编译时,我可以使用./configure选项文件吗?](https://linux22.com/image/90178/%E7%BC%96%E8%AF%91%E6%97%B6%EF%BC%8C%E6%88%91%E5%8F%AF%E4%BB%A5%E4%BD%BF%E7%94%A8.%2Fconfigure%E9%80%89%E9%A1%B9%E6%96%87%E4%BB%B6%E5%90%97%EF%BC%9F.png)
从源代码构建一些软件,有很多配置开关。
./configure --enable-ftp --with-gettext ...
我在一个文本文件中拥有所有我想要的开关,并用换行符分隔,例如:
--enable-ftp
--with-gettext
etc...
有没有办法可以将文本文件作为参数传递给配置来设置选项?或者其他方式来剪切和粘贴我所拥有的选项?
编辑
$HOME
我在开关中使用变量,因此任何解决方案都应该适应这一点。
答案1
要$HOME
在文件中扩展,您可以envsubst
首先使用(请注意,这将扩展任何环境变量)。然后你可以将结果读入数组,例如zsh
args=(${(f)"$(< <(envsubst <infile))"})
或与bash
readarray -t args < <(envsubst <infile)
然后运行
./configure "${args[@]}"
或者,您可以将tr
结果格式化为前面带有 的单行选项./configure
,并将其通过管道传输到sh
:
{ printf %s './configure '; tr '\n' ' ' <infile; } | sh
答案2
一种方法是使用xargs
,它将 stdin 上的空格分隔字符串转换为命令行参数。如果您的文件名为switches
,则如下所示:
xargs ./configure < switches
这不会扩展诸如*
或 之类的东西$VAR
。如果(如在您的编辑中)您希望扩展这些内容,那么有几种方法。我们可以简单地创建一个命令并将其传递给sh
:
xargs printf '%s ' ./configure < switches | sh
或者,如果您有envsubst
,这将扩展变量(如${HOME}
),但不会扩展文件全局变量 ( *
):
envsubst < switches | xargs ./configure