Недавно я (и по глупости, поскольку здесь есть простое решение, установил --prefix=
option на что-то иное, чем по умолчанию /usr/bin
) configure
d и make
d 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
долженсделайте примерно то, что вам нужно. Возможно, вам придется немного переместить файлы в зависимости от желаемой структуры каталогов, но для начала этого будет достаточно.
Обратите внимание, что я это не проверял; вы делаете это на свой страх и риск.