Çözüm: Kaynak Dışı Bir Yapı Yapın
- Yorumlarda önerildiği gibi, kaynak dışı bir derleme yapabilirsiniz.
- İlke: başka bir dizin, bir "yapı ağacı" oluşturmak, bu dizinden yapılandırma komut dosyasını çalıştırmak (göreceli veya mutlak yolla).
Otomatik kontrole sahip örnek
Örneğin, bu, GNU merhaba getirecek ve oluşturacak ve kaynak ağacın biraz değişip değişmediğini kontrol edecektir.
Kaynak ağacı hazırlama
Bu bölüm dizinleri getirir ve hazırlar.
{
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
}
Genel bölüm: projenizde yeniden kullanın
Bu bölüm diğer otokonfa dayalı projelerle kullanılabilir. Sadece çalıştırmadan önce projenize cd. Dikkat: bu rm
, varyantlarla oynamak dikkatli olursanız, her durumda sorumlusunuz.
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
)
Bölümü kontrol et
Bu, derlemenin tamamen kaynak dışı olup olmadığını kontrol eder.
{
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."
}
İşte bunu çıktı:
/tmp/hello-2.10.installtree/bin/hello
Okay, build generated the target.
No change at all. Perfect out-of-source build success.
Bonus: root olmayan kurulum
Yukarıdaki --prefix="${MYPREFIX?}"
bölüm isteğe bağlıdır. Hesabınızda yerel olan bir "make install" işlemine izin verir. Sistem genelinde geleneksel "sudo make install" istiyorsanız, kaldırabilirsiniz --prefix="${MYPREFIX?}"
.