Linux: realice la instalación sin reemplazar enlaces simbólicos

Linux: realice la instalación sin reemplazar enlaces simbólicos

Recientemente (y tontamente, ya que hay una solución simple aquí, configuré --prefix=la opción en algo distinto a lo predeterminado /usr/bin) configured y maked gcc-4.9.1, sin configurar la --prefix=opción. Realmente no quiero volver a hacerlo maketodo, ya que llevará bastante tiempo.

Mi /usr/bin/directorio ya contiene gcc-4.8.2, tal como lo instaló el sistema operativo (Ubuntu-14.04). El punto clave es que todos los enlaces simbólicos existentes apuntan a cosas como gcc-4.8y serán reemplazados con el comando make installpor enlaces simbólicos a gcc-4.9, g++-4.9etc.

¿Puedo pasarle un argumento makediciéndole que no reemplace los enlaces simbólicos que ya existen? ¿O similar?

Respuesta1

En primer lugar, tenga en cuenta queel prefijo predeterminadoa menos que se especifique explícitamente, lo más frecuente es /usr/local. Por lo tanto, sobrescribir la instalación en /usr podría ni siquiera ser un problema en su caso, aunque ciertamente podría causar confusión en el futuro al tener un GCC en /usr y otro en /usr/local.

Si bien no estoy seguro de si funciona específicamente con gcc-4.9.1 (aunque veo pocas razones para que no lo haga), autoconf (que genera el configurescript) proporciona funciones paraanulando el prefijo en el momento de la instalación.

Citando eldocumentación de autoconf, sección "nombres de instalación":

La forma más portátil de afectar las ubicaciones de instalación es pasar las ubicaciones correctas para configurar; sin embargo, muchos paquetes proporcionan uno o ambos de los siguientes atajos para pasar asignaciones de variables a la línea de comando 'make install' para cambiar las ubicaciones de instalación sin tener que reconfigurar o recompilar.

El primer método implica proporcionar una variable de anulación para cada directorio afectado. Por ejemplo, 'make install prefix=/path/to/alternate' elegirá una ubicación alternativa, además de influir en todas las demás variables de configuración del directorio que se expresaron en términos de '${prefix}' (o, dicho de otra manera, todas Los directorios especificados durante la configuración, pero no en términos del prefijo común, deben anularse en el momento de la instalación para que se pueda reubicar toda la instalación). El enfoque de anulación de variables de archivos MAKE para cada variable de directorio es requerido por los estándares de codificación GNU e idealmente no causa recompilación. Sin embargo, algunas plataformas tienen limitaciones conocidas con la semántica de las bibliotecas compartidas que terminan requiriendo una recompilación cuando se usa este método, particularmente notable en paquetes que usan GNU Libtool.

El segundo método implica proporcionar la variable 'DESTDIR'. Por ejemplo, 'make install DESTDIR=/path/to/alternate' antepondrá '/path/to/alternate' antes de todas las rutas de instalación. Los estándares de codificación GNU no requieren el enfoque de anulaciones de 'DESTDIR' y no funciona en plataformas que tienen letras de unidad. Por otro lado, evita problemas de recompilación y funciona bien incluso cuando algunas opciones de directorio no se especificaron en términos de '${prefix}' en el momento de la configuración. Para los paquetes que admiten 'DESTDIR', la variable debe permanecer sin definir durante la configuración y 'hacer todo', y solo especificarse durante 'hacer instalación'.

Entoncesmake install DESTDIR=/opt/gcc-4.8.2 deberíahaz prácticamente lo que buscas. Es posible que tengas que mover los archivos un poco después dependiendo de la estructura de directorio exacta que desees, pero debería ser suficiente para empezar.

Tenga en cuenta que no he probado esto; lo ejecutas bajo tu propio riesgo.

información relacionada