Я тут компилируя gcc, случайно обнаружил, что он прекрасно себя чувствует и работает, будучи размещен по абсолютно любому пути. Вовсе не обязательно, чтобы это был тут путь, который указан в ./configure --prefix=/prefix
. Он просто берёт относительный путь от своего бинарника и находит там свои файлы.
При чем это не какое-то нововведение. Функция make_relative_prefix()
, которой он пользуется, входит в состав древней как GNU библиотеки libiberty.
То есть собираем gcc, например, с ./configure --prefix=/fake-usr
, а потом копируем установочный каталог в любое место хомяка и без проблем пользуемся. Даже не нужно вручную ему пути подсовывать через ключ -B
или переменные окружения.
Собственно, вопрос…
Почему куча остальных программ написана через задницу?
Почему использование make_relative_prefix()
или её аналога не входит в best practices и не описывает в туториалах по сборке программ под линукс?
Почему всё типичное, что может прочитать an average developer о сборке ПО для линукс - это то, как захардкодить фиксированный prefix через аутотулзы, cmake и т.п.?