2009-04-24 22 views
15

¿Cómo configuro la variable de entorno LD_LIBRARY_PATH de un Makefile?establecer LD_LIBRARY_PATH desde Makefile

Tengo un código fuente que enlaza a una biblioteca compartida que a su vez vincula a una biblioteca compartida diferente (más de 1). El Makefile para compilar la aplicación solo sabe sobre la primera biblioteca compartida.

Si quiero construir esto, tengo que especificar: #export LD_LIBRARY_PATH=/path/to/the/shared/libs (para bash) y eso funciona bien.

Sin embargo, me gustaría hacer esto desde el propio Makefile.

Respuesta

2

que había intentado añadir:

export LD_LIBRARY_PATH=/path/to/the/shared/libs 

que aparentemente funciona bien.

Recibía errores porque my/path/to/the/shared/libs era incorrecto.

Sería bueno saber qué hacen los demás por esto y/si hay una manera mejor.

+1

¿Estás seguro de que esto funciona? Según tengo entendido, si lo hace desde el archivo MAKE, 'LD_LIBRARY_PATH' se definiría para este proceso y secundarios, pero no en el shell desde el que ejecutó' make'. – Gauthier

9

Sí, "exportar" es la directiva correcta para usar. Está documentado en detalle here. Este es el mismo mecanismo que se usa para propagar variables a sub-marcas. El inconveniente es que no se puede pasar selectivamente la variable a algunos comandos y no a otros.

Hay otras dos opciones que se me ocurren:

  • Uso .EXPORT_ALL_VARIABLES (especificar como un objetivo en algún lugar), hace que todas las variables que pueden exportar al entorno de sub-comandos.
  • especificar en la línea de comandos:

    foo: 
        EXPORTEDVAR=somevalue gcc $< -o [email protected] 
    
7

Si no desea exportar la variable LD_LIBRARY_PATH en el makefile (por ejemplo, porque tiene Makefile recursivos, que se suman a la variable), se puede mantenerlo vinculado a todas las llamadas a su compilador y vinculador.

O lo agrega directamente a todas las llamadas gcc y ld dentro de sus reglas objetivo, p.

my_target: my_target.o 
    LD_LIBRARY_PATH=/my/library/path gcc -o my_target my_target.o 

o configurar las variables globales maquillaje que definen los compiladores calcular el itinerario, por ejemplo .:

CC=LD_LIBRARY_PATH=/my/library/path gcc 
CPP=LD_LIBRARY_PATH=/my/library/path gcc 
CXX=LD_LIBRARY_PATH=/my/library/path gcc 

Elegí gcc como compilador, pero por supuesto se puede utilizar cualquier compilador te gusta.

2

tuve el mismo problema, he tenido que exportar LD_LIBRARY_PATH como lo hizo:

export LD_LIBRARY_PATH=/path/to/the/shared/libs ; my_command 

Mi amigo me mostró una alternativa cuando LD_LIBRARY_PATH sólo se aplica a un comando, no notará ninguna coma a continuación.

LD_LIBRARY_PATH=/path/to/the/shared/libs my_command 

Este article explica más.

Cuestiones relacionadas