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

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

Недавно я (и по глупости, поскольку здесь есть простое решение, установил --prefix=option на что-то иное, чем по умолчанию /usr/bin) configured и maked gcc-4.9.1, не устанавливая option --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) предоставляет возможности дляпереопределение префикса во время установки.

Цитируядокументация 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 долженсделайте примерно то, что вам нужно. Возможно, вам придется немного переместить файлы в зависимости от желаемой структуры каталогов, но для начала этого будет достаточно.

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

Связанный контент