编译时,我可以使用./configure选项文件吗?

编译时,我可以使用./configure选项文件吗?

从源代码构建一些软件,有很多配置开关。

./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

相关内容