¿Qué hace --prefix exactamente cuando se usa en ./configure?

29

Así que tuve una pregunta simple que probablemente me hará parecer tonta, pero estoy aprendiendo

Cuando hago un

./configure --prefix/usr/bin/

¿Qué está haciendo el prefijo? ¿Esto es solo instalar el paquete en esa ubicación?

¿Puede una respuesta dar una respuesta más elaborada para una instalación complicada y explicar en detalle los prefijos y las opciones que la acompañan?

Si tuviera que ejecutar una instalación de apt-get, ¿cómo la instalaría en una ubicación determinada con prefijo?

También he visto

 PREFIX=/tmp/installdir make


 PREFIX=/tmp/installdir make install

Si se llama al prefijo en ./configure, ¿por qué siempre se hace en estos dos ejemplos?

¡Gracias de antemano!


fuente
Alguna información aquí: Estándares de codificación GNU: Variables de directorio
steeldriver
comprobar respuesta actualizada
luv.preet
freetds.org/userguide/config.htm , esto te ayudará más
luv.preet
Revisores: se trata de instalar software . Tiene tres votos cerrados fuera de tema como "no se trata de Ubuntu". Si cerrar esto es de alguna manera consistente con cualquier política real del sitio , sugiero comentar. De lo contrario, es probable que se vuelva a abrir incluso si está cerrado.
Eliah Kagan

Respuestas:

32

Cuando instala software con make installo sudo make install, se colocan diferentes archivos en diferentes directorios. Los archivos ejecutables que proporcionan comandos que el usuario debe ejecutar suelen ir en un bindirectorio, las bibliotecas suelen ir en un libdirectorio, las páginas del manual suelen ir en un mandirectorio, etc.

Cuando ejecuta ./configure, la --prefixopción le permite especificar dónde están esos directorios . Se llama --prefixporque le permite dar el prefijo que aparece en las rutas a cada uno de los directorios donde se instalarán los archivos del programa o biblioteca que está creando. La mayoría de los configurescripts son compatibles --prefix, y omitirlo y simplemente ejecutarlo ./configuresuele ser equivalente a ./configure --prefix=/usr/local.

Para responder esto más completamente, he reproducido dos secciones de mi respuesta a ¿Cómo instalar el archivo tar "globalmente"? (en Unix y Linux ), que abordan esta pregunta específicamente:

Configurando su Build

Cuando tenga el código fuente que se compila ejecutando ./configure y make, generalmente usará make install(o sudo make install) para instalarlo. Esto copia archivos del directorio de compilación en la ubicación de instalación. Cuando lo que está instalando proporciona comandos ejecutables, esos ejecutables generalmente se copian en un directorio que está dentro $PATHo al que debería considerar agregar $PATH.

Aunque la creación e instalación de software a menudo es tan simple como ejecutar ./configure, a makeveces make checko make test, y luego make installo sudo make install, a veces querrá pasar opciones al configurescript para configurar la compilación. En particular, como dice pfnuesel , así es como se configura dónde se instalará el software. Aunque el make installpaso realmente instala el software, las ubicaciones donde se instalará todo normalmente se establecen en el ./configurepaso.

La opción más común para esto es --prefix. El prefijo predeterminado, cuando no dice configurequé usar, generalmente es /usr/local. (Ocasionalmente, el código fuente de un programa o biblioteca se predetermina a algún otro prefijo. Afortunadamente esto es raro).

Por ./configurelo tanto, suele ser equivalente a ./configure --prefix=/usr/local. Para instalar software en su directorio de inicio, puede usar ./configure --prefix=/home/galahad(si /home/galahades su directorio de inicio) o --prefix="$HOME". Entonces, por supuesto, aún debe compilar e instalar el software con make. Debo decir que no todo el software que se distribuye en forma de código fuente está construido de esta manera. Siempre debe buscar documentación dentro del archivo de código fuente extraído.

Lo que --prefixsignifica

Cuando ejecuta , está indicando que el software debe instalarse en el directorio. Pero esto rara vez, si alguna vez, coloca archivos sueltos . En su lugar, coloca archivos que tienen diferentes propósitos en los diferentes subdirectorios de . Si esos subdirectorios no existen, los crea../configure --prefix=directorydirectorydirectorydirectory

Los ejecutables generalmente entran directory/bin, aunque pueden entrar directory/sbinsi se usan comúnmente para la administración del sistema o pueden entrar (más raramente, en estos días) directory/gamessi son juegos. Las bibliotecas entran directory/libu otro directorio con un nombre similar como directory/lib32. Los archivos de encabezado entran directory/include. Entran las páginas del manual directory/man. Los archivos de datos utilizados por el software entran directory/share.

Eso es lo que significa directoryser un prefijo . Es el directorio principal que contiene las ubicaciones en las que se instalarán diferentes archivos. Por lo tanto, aparece como un prefijo en las rutas absolutas de la mayoría de los archivos y directorios creados al ejecutar make install o sudo make install.

Hay algunas excepciones a esto. Los archivos de configuración de todo el sistema, que a veces se crean al instalar el software que los usará, aunque no siempre, generalmente entran /etc. Esto no suele verse afectado al especificar un prefijo diferente. Incluso si instala una gran cantidad de software /usr/local, seguirá usándose principalmente /etc, y su /usr/local/etcdirectorio probablemente no existirá, estará vacío o contendrá muy pocos archivos.

En muchos sistemas, puede encontrar más información sobre el diseño típico del sistema de archivos ejecutando man hier. Si está utilizando un sistema GNU / Linux, puede estar interesado en el Estándar de jerarquía del sistema de archivos .

Eliah Kagan
fuente
2

Indica la ubicación de los elementos necesarios para configurar el paquete o software actual.

Como en un caso simple, puede indicar la ubicación de las bibliotecas SSL:

--with-libssh2=/usr/local  #used in configuring nagios

y también le dice qué paquetes no configurar, para hacer compilaciones adecuadas del programa de acuerdo con su sistema:

--disable-shared  # used in configuring nagios
--disable-link-balancer  # used in configuring Firehol

Estas son solo opciones adicionales para hacer una compilación adecuada para su sistema. Es lo que pienso. Corrígeme si es otra cosa.

La --prefix=PREFIXopción instala archivos independientes de arquitectura en PREFIX. Cuando ejecuta un make installcomando, las bibliotecas se colocarán en el PREFIX/libdirectorio, los ejecutables en el PREFIX/bindirectorio, etc.

Si este argumento no se pasa al configurecomando, entonces el valor predeterminado es /usr/local.

luv.preet
fuente