Soluzione: crea una build out-of-source
- Come suggerito nei commenti, è possibile eseguire una build non di origine.
- Il principio è: creare un'altra directory, un "albero di costruzione", eseguire lo script di configurazione da quella directory (con percorso relativo o assoluto).
Esempio con controllo automatico
Ad esempio, questo prenderà e genererà ciao GNU e verificherà che l'albero dei sorgenti non sia cambiato un po '.
Preparazione dell'albero della fonte
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 il cd nel tuo progetto prima di eseguirlo. Attenzione: questo funziona rm
, se si gioca con le varianti fare attenzione, si è responsabili in ogni 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
)
Controlla la parte
Questo 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 emette 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 --prefix="${MYPREFIX?}"
parte sopra è facoltativa. Permette di fare un "make install" che è locale al tuo account. Se si desidera "sudo make install" tradizionale in una posizione a livello di sistema, è possibile rimuoverlo --prefix="${MYPREFIX?}"
.