2012-05-23 14 views
6

¿Cómo puedo decirle al automake que instale archivos de datos arbitrarios en los lugares que quiero?Instalar archivos de datos arbitrarios en una ubicación fija con Automake?

Tengo algunos archivos que debo colocar en lugares específicos, p. "datafile1", en mi proyecto, debe copiarse en "/usr/MyProduct/flash_memory".

  • "/usr/MyProduct/flash_memory" es una ruta absoluta que no puedo cambiar.
  • "datafile1" es un archivo de datos binarios que no es "creado" por make, pero solo necesita ser copiado por make install.
  • No puedo soportar make dist. Necesita ser copiado por make install (es una larga explicación, entonces, pelase solo tome esto en cuenta).
  • Prefiero no usar install-hook, pero prefiero tener un enfoque más elegante (si es posible).

Realmente gracias!

Respuesta

11

No utilice las rutas completas en su Makefile.am. Nunca. Se puede decir automake para poner el datafile1 en $(datadir) que se expandirá a $(prefix)/share/MyProduct, o puede definir flash_DIR expandirse a $(prefix)/MyProduct/flash_memory y poner los archivos allí, pero el usuario final debe estar permitido establecer $(prefix) ya sea a /usr oa otra cosa. Lo que se quiere hacer en Makefile.am es:

flashdir = $(prefix)/$(PACKAGE)/flash_memory 
flash_DATA = datafile1 

(probablemente sería más apropiado utilizar $(prefix)/@[email protected]/flash_memory, puesto paquete no debe ser modificable en el tiempo de maquillaje, pero no creo que esto es terriblemente importante .)

Luego, cuando es usuario, ejecute make install con el prefijo establecido en /usr. Si intenta utilizar una ruta absoluta en el archivo Makefile.am, no permitirá las instalaciones por etapas (es decir, establecer DESTDIR), restringirá la flexibilidad del usuario, y es el equivocado que hacer. El punto principal es que el mantenedor del paquete no puede elegir la ubicación final; esa es una decisión para el usuario.

+0

Como dije antes, "'/usr/MyProduct/flash_memory' "es una ruta absoluta que no puedo cambiar. No es mi elección. Ignorando eso, probé "' confdir = ... conf_DATA = datafile1' "pero no funcionó. ¿Alguna pista? Gracias – j4x

+2

@fljx Cuando dice "No puedo cambiar", ¿quiere decir "I" como el usuario que instala el paquete, o quiere decir "I" cuando es el mantenedor del paquete? Si el primero, mi respuesta funciona. Si te refieres a lo último, entonces deja de usar automake; estás abusando de la herramienta. –

+0

Me refiero a "Yo, el trabajador que obedece a mi jefe". De todos modos, cambié 'confdir' a" 'confdir = $ (prefix)/usr/awmg/flash /' "y funciona. La ruta absoluta no. Solo quiero entender por qué, ahora ... ¡Gracias otra vez! – j4x

Cuestiones relacionadas