컴파일 시 ./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

관련 정보