Solusi: buat bangunan di luar sumber
- Seperti yang disarankan dalam komentar, Anda dapat melakukan pembuatan di luar sumber.
- Prinsipnya adalah: buat direktori lain, "build tree", jalankan skrip configure dari direktori itu (dengan jalur relatif atau absolut).
Contoh dengan cek otomatis
Sebagai contoh, ini akan mengambil dan membangun GNU halo dan memeriksa bahwa pohon sumber tidak diubah sedikit pun.
Persiapan pohon sumber
Bagian ini mengambil dan menyiapkan direktori.
{
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
}
Bagian umum: gunakan kembali itu dalam proyek Anda
Bagian ini dapat digunakan dengan proyek berbasis autoconf lainnya. Cukup masukkan ke dalam proyek Anda sebelum menjalankan. Hati-hati: ini berjalan rm
, jika bermain dengan varian hati-hati, Anda bertanggung jawab dalam hal apa pun.
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
)
Periksa bagian
Ini memeriksa apakah build benar-benar di luar sumber.
{
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."
}
Ini dia output ini:
/tmp/hello-2.10.installtree/bin/hello
Okay, build generated the target.
No change at all. Perfect out-of-source build success.
Bonus: instalasi non-root
Bagian di --prefix="${MYPREFIX?}"
atas adalah opsional. Hal ini memungkinkan untuk melakukan "make install" yang bersifat lokal ke akun Anda. Jika Anda ingin "sudo make install" tradisional ke lokasi seluruh sistem, Anda dapat menghapus --prefix="${MYPREFIX?}"
.