Automake - come mantenere pulito l'albero dei sorgenti?

9

Ho un progetto che usa gli autotools GNU per costruirsi. Sto cercando di modificare in modo che autotools generi tutti i file di controllo non in versione in una directory separata in modo che possa mantenere pulito l'albero dei sorgenti dei file temporanei. Qualcuno ha qualche idea su come fare questo?

    
posta vorad 01.07.2011 - 15:18
fonte

2 risposte

2

Il pacchetto autotools ha molti percorsi e nomi relativi hard coded in esso per una buona ragione. L'opzione migliore è riassumere l'output e contrassegnarli come ignorati nel controllo di revisione, ad es. in .cvsignore , .hgignore o come svn:ignore attibute. Alcuni RCS ti permettono persino di specificare in modo ricorsivo i caratteri jolly.

    
risposta data 05.10.2011 - 19:44
fonte
1

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?}" .

    
risposta data 15.07.2018 - 17:12
fonte

Leggi altre domande sui tag