Giải pháp: thực hiện xây dựng ngoài nguồn
- Theo đề xuất trong các bình luận, bạn có thể thực hiện xây dựng ngoài nguồn.
- Nguyên tắc là: tạo một thư mục khác, "cây xây dựng", chạy tập lệnh cấu hình từ thư mục đó (với đường dẫn tương đối hoặc tuyệt đối).
Ví dụ với kiểm tra tự động
Ví dụ, điều này sẽ tìm nạp và xây dựng GNU hello và kiểm tra xem cây nguồn không bị thay đổi một chút nào.
Chuẩn bị cây nguồn
Phần này tìm nạp và chuẩn bị các thư mục.
{
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
}
Phần chung: tái sử dụng trong dự án của bạn
Phần này có thể được sử dụng với các dự án dựa trên autoconf khác. Chỉ cần cd vào dự án của bạn trước khi chạy. Cẩn thận: điều này chạy rm
, nếu chơi với các biến thể hãy cẩn thận, bạn có trách nhiệm trong mọi trường hợp.
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
)
Kiểm tra một phần
Điều này kiểm tra nếu bản dựng hoàn toàn không có nguồn.
{
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."
}
Ở đây nó xuất ra điều này:
/tmp/hello-2.10.installtree/bin/hello
Okay, build generated the target.
No change at all. Perfect out-of-source build success.
Phần thưởng: cài đặt không root
Phần --prefix="${MYPREFIX?}"
trên là tùy chọn. Nó cho phép thực hiện "thực hiện cài đặt" cục bộ cho tài khoản của bạn. Nếu bạn muốn "sudo make install" truyền thống đến vị trí toàn hệ thống, bạn có thể xóa --prefix="${MYPREFIX?}"
.