Solução: faça uma compilação fora da fonte
- Conforme sugerido nos comentários, você pode fazer uma compilação fora da fonte.
- O princípio é: crie outro diretório, uma "árvore de construção", execute o script configure a partir desse diretório (com caminho relativo ou absoluto).
Exemplo com verificação automatizada
Por exemplo, isso buscará e criará o hello GNU e verificará se a árvore de origem não foi alterada nem um pouquinho.
Preparação da árvore de origem
Esta parte busca e prepara os diretórios.
{
wget -S http://ftp.gnu.org/gnu/hello/hello-2.10.tar.gz
tar zxvf hello-2.10.tar.gz
mv hello-2.10 hello-2.10-pristine
tar zxvf hello-2.10.tar.gz
diff -urq hello-2.10 hello-2.10-pristine && echo "Before build, directories are identical."
cd hello-2.10
}
Parte genérica: reutilize isso no seu projeto
Esta parte pode ser usada com outros projetos baseados em autoconf. Basta entrar no seu projeto antes de executar. Cuidado: isso funciona rm
, se jogar com variantes tenha cuidado, você é responsável em qualquer caso.
export MYPREFIX="${PWD}.installtree"
(
set -eu # abort on error
ls configure # make sure it aborts if not in correct directory
export SRCTREE="${PWD}"
export BUILDTREE="${PWD}.buildtree"
rm -rf "$BUILDTREE" "$MYPREFIX"
mkdir "$BUILDTREE" "$MYPREFIX"
cd "$BUILDTREE"
"${SRCTREE}"/configure --prefix="${MYPREFIX?}"
time make -k || time make
time make install
)
Verificar parte
Isso verifica se a compilação está perfeitamente fora da fonte.
{
ls "$MYPREFIX"/bin/hello && echo "Okay, build generated the target."
cd "$MYPREFIX"/..
diff -urq hello-2.10 hello-2.10-pristine && echo "No change at all. Perfect out-of-source build success."
}
Aqui ele mostra isso:
/tmp/hello-2.10.installtree/bin/hello
Okay, build generated the target.
No change at all. Perfect out-of-source build success.
Bônus: instalação não raiz
A --prefix="${MYPREFIX?}"
parte acima é opcional. Ele permite fazer um "make install" local à sua conta. Se você quiser o "sudo make install" tradicional em todo o sistema, poderá removê-lo --prefix="${MYPREFIX?}"
.