Решение: сделать сборку из исходного кода
- Как предлагается в комментариях, вы можете сделать сборку вне исходного кода.
- Принцип таков: создайте другой каталог, «дерево сборки», запустите скрипт настройки из этого каталога (с относительным или абсолютным путем).
Пример с автоматической проверкой
Например, это извлечет и соберет GNU hello и проверит, что исходное дерево не изменилось чуть-чуть.
Подготовка исходного дерева
Эта часть выбирает и готовит каталоги.
{
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
}
Общая часть: повторно используйте это в своем проекте
Эта часть может использоваться с другими проектами на основе autoconf. Просто войдите в свой проект перед запуском. Осторожно: это работает 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.
Бонус: установка без полномочий root
--prefix="${MYPREFIX?}"
Часть выше , является необязательным. Это позволяет выполнить «make install», которая является локальной для вашей учетной записи. Если вы хотите традиционную «sudo make install» для всей системы, вы можете удалить ее --prefix="${MYPREFIX?}"
.