Lösung: Erstellen Sie einen Out-of-Source-Build
- Wie in den Kommentaren vorgeschlagen, können Sie einen Out-of-Source-Build durchführen.
- Das Prinzip lautet: Erstellen Sie ein anderes Verzeichnis, einen "Build-Baum", und führen Sie das Konfigurationsskript in diesem Verzeichnis aus (mit relativem oder absolutem Pfad).
Beispiel mit automatisierter Prüfung
Dadurch wird beispielsweise GNU Hallo abgerufen und erstellt und überprüft, ob der Quellbaum nicht geringfügig geändert wurde.
Vorbereitung des Quellbaums
Dieser Teil ruft die Verzeichnisse ab und bereitet sie vor.
{
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
}
Allgemeiner Teil: Verwenden Sie diesen in Ihrem Projekt wieder
Dieser Teil kann mit anderen autoconf-basierten Projekten verwendet werden. CD einfach in Ihr Projekt, bevor Sie es ausführen. Achtung: Dies läuft rm
, wenn Sie vorsichtig mit Varianten spielen, sind Sie auf jeden Fall verantwortlich.
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
)
Teil prüfen
Dadurch wird überprüft, ob der Build vollständig außerhalb der Quelle liegt.
{
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."
}
Hier gibt es Folgendes aus:
/tmp/hello-2.10.installtree/bin/hello
Okay, build generated the target.
No change at all. Perfect out-of-source build success.
Bonus: Nicht-Root-Installation
Der --prefix="${MYPREFIX?}"
obige Teil ist optional. Es ermöglicht eine "make install", die lokal für Ihr Konto ist. Wenn Sie eine herkömmliche "sudo make install" an einem systemweiten Speicherort wünschen, können Sie diese entfernen --prefix="${MYPREFIX?}"
.