Estoy haciendo el desarrollo de Linux en un par de máquinas, principalmente Slackware 13.37 y Ubuntu 12.04. Yo soy la prueba y validación de los resultados de un par de simples ficheros makefile, y desea confirmar la salida de make install. Sin embargo, antes de que me vaya por delante que las pruebas de esta, quiero saber si hay un portátil medio de cambiar el valor predeterminado de destino de salida para make install para cualquier archivo makefile.

Yo preferiría si de alguna manera podría etapa de mi salida, por lo que toda la producción va a, por ejemplo:

/test/bin
/test/lib
/test/usr/bin

lugar de:

/bin
/lib
/usr/bin

Sé que en QNX entornos de desarrollo, por ejemplo, puedo configurar las variables de entorno como QCONF_OVERRIDE y INSTALL_ROOT_nto, y la garantía de que ningún makefile es capaz de instalar en otro lugar que en un subdirectorio de /test por ejemplo. Hay un mecanismo similar para el GCC en Ubuntu que sólo requiere configurar algunas variables de entorno en mi ~/.bashrc archivo? Hago todo mi trabajo a través de la línea de comandos y VIM todos modos, así que no estoy preocupado acerca de el caso de que un bonito IDE no entiende estas variables de entorno, debido a que no está en un .kderc, .gnomerc, o equivalente.

Gracias.

¿Has probado con make --prefix=/path/to/local/directory?
Que no funciona; --prefix no es una bandera para make. Para responder a la pregunta original, no, no hay ninguna variable se puede establecer que se garantiza que, independientemente de la makefile. Si hay una manera de hacer esto o no es una función de la makefile. Si el archivo makefile tiene una manera de hacerlo puede; si no, no puede. Sin embargo, prácticamente todos los makefile no tiene una manera de hacerlo.
OK. Es una vergüenza que esto no es una distribución independiente de la cosa que puede ser administrado, especialmente teniendo en cuenta cómo GCC ha sido, junto con Linux desde sus primeros días (empecé en Slackware 3.0). QNX no esta muy bien, y permite incluso anular los casos donde la make install objetivo explícitamente intenta instalar a una ruta de acceso absoluta con sólo configurar algunas variables de entorno en una secuencia de comandos de origen de todos los usuarios de inicio de sesión.
make DESTDIR=/test install
DESTDIR y el PREFIJO de hacer

OriginalEl autor DevNull | 2014-02-13

3 Comentarios

  1. 5

    Respuesta corta: no.

    Respuesta larga:

    No existe una manera de establecer el destino de salida para cualquier archivo Makefile; el Makefile o alguna otra parte del sistema de construcción tiene que ser diseñado para que sea posible. make es una herramienta muy sencilla, ya que está diseñada para funcionar de forma idéntica a través de una amplia variedad de plataformas. En consecuencia, no realmente uso de variables de entorno que no están presentes en el Makefile de la misma. Esto es bueno en términos de contaminación del medio ambiente y para mantener las cosas en menos de magia, pero malo para el logro de su meta deseada.

    Un poco de contexto: las cosas son un poco más complicado, en parte porque, a diferencia de la QNX entorno de desarrollo (una gran parte homogénea de compilación cruzada medio ambiente), una gran porción de software que usa hacer (estoy asumiendo GNU make, pero esto se aplica a otras versiones) para construir está escrito por un grupo heterogéneo de construir y ejecutar medio ambiente—que puede ser diseñado para ser capaz de construir para diferentes distribuciones de sistemas operativos (Linux, MS Windows, Mac OS X, FreeBSD, etc.), e incluso la arquitectura de hardware (x86, arm, mips, poder, sparc, sh, etc.). A veces estamos construyendo para el mismo sistema y a veces por una diferente. Como era de esperar, realmente no hay una manera estándar de definir una ruta de instalación a través de una variedad de sistemas.

    Basile menciona en su respuesta que para los programas que utilizan el sistema de compilación GNU, puede utilizar ./configure --prefix=/test. Normalmente trabajo para programas sencillos que utilizan las Autotools. Para que los programas más complicados de usar GNU Autotools, por lo general hay complicaciones si más diversas opciones están disponibles:

    • compilación cruzada? Es posible que desee su prefijo se establezca en donde va a ser instalado en el sistema de destino (tal vez de /usr/local), y el uso de make install DESTDIR=/test.
    • ¿Su sistema de generación de esperar dependencias en el prefijo de directorio, pero desea encontrar en otro lugar? Mejor corre ./configure --help para ver qué otras opciones hay para proporcionar rutas de acceso alternativas (a menudo --with-foo=/prefix/of/foo)

    Estoy seguro de que hay más que me estoy olvidando de ahora, pero creo que usted consigue el cuadro.

    Tenga en cuenta que sólo se aplica a los proyectos que utilizan las Autotools. Otros proyectos pueden tener otros sistemas (tal vez nomenclatura de una variable o editando un archivo de configuración), por lo que en última instancia, su mejor apuesta es leer la documentación del proyecto, y en su defecto, el fichero Makefile. Divertido, eh?

    P. S. Tener las variables definidas en el entorno es diferente de lo que se les pasa como un argumento de comando make, es decir, SPAM="alot" make target es diferente de make target SPAM="alot"—el último sustituir variables en el makefile. Ver el make de GNU docs en Las Variables del Entorno.

    OriginalEl autor cha5on

  2. 2

    Al menos para el software de GNU (utilizando autotools) usted debe configurar su software con

    ./configure --prefix=/test

    solo uso (sin una específica --prefix a configure antes)

    make prefix=/test install

    no suelen funcionar correctamente, porque algunos de los archivos están integrados por el programa de modo que su camino se convierte en una constante en su interior.

    también puede utilizar make install DESTDIR=/tmp/dest y, a continuación, copie /tmp/dest a /test, pero no funciona correctamente ni

    Por ejemplo, mi /usr/local/bin/emacs binario /usr/local/share/emacs/24.3.50/lisp como algunos cadena (marcada con strings /usr/local/bin/emacs de comandos) y el /usr/local/ parte de ese camino es la configure-d prefijo.

    Por CIERTO, usted podría tener un chroot-ed entorno para probar sus aplicaciones para varias distribuciones.

    OriginalEl autor Basile Starynkevitch

Dejar respuesta

Please enter your comment!
Please enter your name here