Ao compilar, posso usar um arquivo para opções ./configure?

4

Criando algum software a partir do código-fonte e há muitos switches de configuração.

./configure --enable-ftp --with-gettext ...

Eu tenho todos os switches que eu quero em um arquivo de texto separados por novas linhas, por exemplo:

--enable-ftp
--with-gettext
etc...

Existe uma maneira de passar o arquivo de texto como argumento para configurar as opções? Ou alguma outra maneira de recortar e colar as opções que tenho?

EDITAR

Estou usando a variável $HOME em meus comutadores para que qualquer solução possa acomodar isso.

    
por User 08.07.2016 / 21:34

2 respostas

2

Para expandir $HOME em seu arquivo, você pode usar envsubst first (esteja ciente de que isso expandirá qualquer variável env). Então você pode ler o resultado em uma matriz, por exemplo com zsh

args=(${(f)"$(< <(envsubst <infile))"})

ou com bash

readarray -t args < <(envsubst <infile)

e, em seguida, execute

./configure "${args[@]}"

Como alternativa, você pode usar tr para formatar o resultado como uma única linha de opções precedida por ./configure e canalizar isso para sh :

{ printf %s './configure '; tr '\n' ' ' <infile; } | sh
    
por 09.07.2016 / 01:22
2

Uma maneira de fazer isso é usar xargs , que transforma as strings separadas por espaços em branco em stdin em argumentos de linha de comando. Se o seu arquivo é chamado switches , isso seria parecido com:

xargs ./configure < switches

Isso não expandirá itens como * ou $VAR . Se (como na sua edição) você quiser que estes sejam expandidos, então existem algumas abordagens. Podemos simplesmente criar um comando e passá-lo para sh :

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

Ou, se você tiver envsubst , isso expandirá as variáveis (como ${HOME} ), mas não as globs de arquivo ( * ):

envsubst < switches | xargs ./configure
    
por 08.07.2016 / 21:50