Rozwiązanie: wykonaj kompilację spoza źródła
- Jak sugerowano w komentarzach, możesz wykonać kompilację spoza źródła.
- Zasada jest taka: utwórz inny katalog, „drzewo kompilacji”, uruchom skrypt konfiguracyjny z tego katalogu (ze ścieżką względną lub bezwzględną).
Przykład z automatycznym sprawdzaniem
Na przykład, to pobierze i zbuduje GNU hello i sprawdzi, czy drzewo źródłowe nie zostało nieznacznie zmienione.
Przygotowanie drzewa źródłowego
Ta część pobiera i przygotowuje katalogi.
{
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
}
Część ogólna: użyj tego ponownie w swoim projekcie
Ta część może być używana z innymi projektami opartymi na autoconf. Po prostu włóż płytę CD do swojego projektu przed uruchomieniem. Uwaga: to działa rm
, jeśli grasz wariantami, bądź ostrożny, w każdym przypadku jesteś odpowiedzialny.
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
)
Sprawdź część
To sprawdza, czy kompilacja jest całkowicie poza źródłem.
{
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."
}
Tutaj wyprowadza to:
/tmp/hello-2.10.installtree/bin/hello
Okay, build generated the target.
No change at all. Perfect out-of-source build success.
Bonus: instalacja użytkownika innego niż root
--prefix="${MYPREFIX?}"
Powyżej część jest opcjonalna. Pozwala wykonać „make install” lokalnie dla twojego konta. Jeśli chcesz tradycyjne „sudo make install” w lokalizacji systemowej, możesz je usunąć --prefix="${MYPREFIX?}"
.
Stéphane Gourichon
źródło