Linux - сделать установку без замены символических ссылок

Я недавно (и глупо, так как здесь есть простое решение, если бы я установил --prefix= вариант к чему-то другому, чем это по умолчанию /usr/bin) configureд и maked gcc-4.9.1без настройки --prefix= вариант. Я не хочуmake все дело в том, что это займет прилично большой кусок времени.

мой /usr/bin/ каталог уже содержит gcc-4.8.2, как установлено ОС (Ubuntu-14.04). Ключевым моментом является то, что существующие символические ссылки все указывают на такие вещи, как gcc-4.8и будет заменен по команде make install по символическим ссылкам на gcc-4.9, g++-4.9 и т.п.

Могу ли я передать аргумент make, сказав, чтобы не заменить символические ссылки, которые уже существуют? Или похожие?

1 ответ

Решение

Во-первых, обратите внимание, что префикс по умолчанию, если он не указан явно, чаще всего /usr/local. Таким образом, перезапись установки в /usr может даже не быть проблемой в вашем случае, хотя это, безусловно, может привести к путанице в будущем, когда один GCC находится в /usr, а другой в /usr/local.

Хотя я не уверен, работает ли он конкретно с gcc-4.9.1 (хотя я не вижу особой причины, по которой это происходит), autoconf (который генерирует configure script) предоставляет возможности для переопределения префикса во время установки.

Цитируем документацию autoconf, раздел "имена установок":

Самый переносимый способ повлиять на места установки - передать правильные места для настройки; однако многие пакеты предоставляют один или оба из следующих сочетаний клавиш для передачи назначений переменных в командную строку "make install" для изменения мест установки без необходимости перенастраивать или перекомпилировать.

Первый метод предусматривает предоставление переменной переопределения для каждого затронутого каталога. Например, 'make install prefix=/path/to/alternate' выберет альтернативное расположение, а также повлияет на все остальные переменные конфигурации каталога, которые были выражены в терминах '${prefix}' (или, другими словами, все каталоги, указанные во время конфигурирования, но не в терминах общего префикса, должны быть переопределены во время установки для перемещения всей установки). Подход переопределений переменных makefile для каждой переменной каталога требуется стандартами кодирования GNU и в идеале не вызывает перекомпиляции. Тем не менее, некоторые платформы имеют известные ограничения семантики разделяемых библиотек, которые требуют перекомпиляции при использовании этого метода, особенно это заметно в пакетах, использующих GNU Libtool.

Второй метод предусматривает предоставление переменной 'DESTDIR'. Например, 'make install DESTDIR=/path/to/alternate' будет предшествовать '/ path / to / alternate' перед всеми путями установки. Подход переопределений 'DESTDIR' не требуется стандартами кодирования GNU и не работает на платформах с буквами дисков. С другой стороны, он лучше избегает проблем с перекомпиляцией и работает хорошо, даже когда некоторые параметры каталога не были указаны в терминах "${prefix}" во время настройки. Для пакетов, которые поддерживают 'DESTDIR', переменная должна оставаться неопределенной во время конфигурации и 'make all' и указываться только во время 'make install'.

Так make install DESTDIR=/opt/gcc-4.8.2 должен делать в значительной степени то, что вы после. После этого вам может понадобиться немного переместить файлы в зависимости от желаемой структуры каталогов, но это должно быть достаточно для начала.

Обратите внимание, что я не проверял это; Вы управляете этим на свой страх и риск.

Другие вопросы по тегам