コンパイル時に./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前の1行オプションを使用して結果をフォーマットし、./configure次にパイプすることもできますsh

{ printf %s './configure '; tr '\n' ' ' <infile; } | sh

答え2

xargs1つの方法は、stdinのスペースで区切られた文字列をコマンドライン引数に変換することを使用することです。ファイル名がswitches次の場合:

xargs ./configure < switches

*これは、または同じものを拡張しません$VAR。 (編集のように)それを拡張したい場合は、いくつかの方法があります。簡単にコマンドを生成して渡すことができますsh

xargs printf '%s ' ./configure < switches | sh

またはがある場合、envsubst変数(など${HOME})は拡張されますが、ファイルグローバル変数(*)は拡張されません。

envsubst < switches | xargs ./configure

関連情報