Рішення: створити збірку з джерела
- Як запропоновано в коментарях, ви можете зробити збірку з джерела.
- Принцип полягає в тому, що: створити інший каталог, "дерево побудови", запустіть сценарій налаштування з цього каталогу (з відносним або абсолютним шляхом).
Приклад з автоматизованою перевіркою
Наприклад, це вибере і створить привіт GNU і перевірить, чи не змінилось джерело дерево.
Підготовка вихідного дерева
Ця частина отримує та готує каталоги.
{
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
}
Загальна частина: повторно використовувати це у своєму проекті
Ця частина може бути використана з іншими проектами, заснованими на автоконтролі. Просто запустіть проект у свій проект перед запуском. Обережно: це працює rm
, якщо грати з варіантами будьте обережні, ви відповідаєте в будь-якому випадку.
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
)
Перевірте частину
Це перевіряє, чи збірка є без джерела.
{
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."
}
Ось це виводить це:
/tmp/hello-2.10.installtree/bin/hello
Okay, build generated the target.
No change at all. Perfect out-of-source build success.
Бонус: некоренева установка
--prefix="${MYPREFIX?}"
Частина вище , є необов'язковим. Це дозволяє зробити "make install", який є локальним для вашого облікового запису. Якщо ви хочете, щоб традиційне "sudo make install" у загальносистемному місці, ви можете видалити --prefix="${MYPREFIX?}"
.