Soluzione: crea una build esterna
- Come suggerito nei commenti, puoi eseguire una compilazione out-of-source.
- Il principio è: creare un'altra directory, un "albero di build", eseguire lo script configure da quella directory (con percorso relativo o assoluto).
Esempio con controllo automatico
Ad esempio, questo recupererà e costruirà GNU hello e controllerà che l'albero dei sorgenti non sia cambiato un pochino.
Preparazione dell'albero delle origini
Questa parte recupera e prepara le directory.
{
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 generica: riutilizzala nel tuo progetto
Questa parte può essere utilizzata con altri progetti basati su autoconf. Inserisci un CD nel tuo progetto prima di eseguirlo. Attenzione: questo valore rm
, se stai giocando con le varianti fai attenzione, sei comunque responsabile.
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
)
Verifica parte
Controlla se build è perfettamente out-of-source.
{
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."
}
Qui mostra questo:
/tmp/hello-2.10.installtree/bin/hello
Okay, build generated the target.
No change at all. Perfect out-of-source build success.
Bonus: installazione non root
La parte --prefix="${MYPREFIX?}"
sopra è facoltativa. Permette di fare un "make install" che è locale al tuo account. Se vuoi "sudo make install" tradizionale per l'ubicazione a livello di sistema, puoi rimuovere --prefix="${MYPREFIX?}"
.