En los sistemas GNU/Linux, Donde debo aplicación de carga de datos a partir de?

StackOverflow https://stackoverflow.com/questions/967038

  •  12-09-2019
  •  | 
  •  

Pregunta

En este ejemplo estoy usando c con autoconf, pero la pregunta se aplica en otros lugares.

Tengo un calvero archivo xml que se necesita en tiempo de ejecución, y tengo que decirle a la aplicación en donde se está.Estoy usando autoconf para definir una variable en el código que señala el "prefijo especificado el directorio"/app-name/glade.Pero que sólo comienza a trabajar una vez que la aplicación está instalada.Lo que si quiero ejecutar el programa antes de ese punto?Hay una manera estándar para determinar qué rutas deben ser revisados para los datos de la aplicación?

Gracias


Gracias por las respuestas.Para aclarar, yo no necesito saber dónde están los datos de la aplicación está instalado (por ejemplo, mediante la búsqueda en el directorio /usr,usr/local,etc, etc), el script de configuración hace que.El problema era más la de determinar si la aplicación se ha instalado todavía.Creo que voy a comprobar en la ubicación de instalación de la primera, y si no, a continuación, en "./src/foo.glade".

¿Fue útil?

Solución

No pienso que haya ninguna manera estándar en la forma de localizar esos datos.

Yo personalmente lo haría de una manera que yo tendría una lista de rutas y me localizo si puedo encontrar el archivo de cualquiera de las personas y la lista debería containt la DATADIR + NOMBREAPLIC definida a partir de autoconf y CurrentDirectory + POSSIBLE_PREFIX donde el prefijo podría ser alguna carpeta de su raíz de construcción.

Pero en cualquier caso, no se olvide de utilizar esos define de autoconf para sus archivos de datos, aquellos que su software sea más fácil de empaquetar (como deb / rpm)

Otros consejos

No hay una receta de cómo esto debe hacerse en general, pero por lo general los empaquetadores de Debian instala los datos de aplicación en algún lugar de / usr / share / usr / lib, etcétera. También pueden parchear el software para que sea leído desde los lugares apropiados. Se puede ver la Debian política para más información.

Sin embargo puedo decir unas pocas palabras cómo lo hago. En primer lugar, no me esperaba encontrar el archivo en un directorio único; La primera vez que se crea una lista de directorios que iterar a través de mi envoltura alrededor fopen(). Este es el orden en el que creo que la lectura de archivos se debe hacer:

  • directorio actual (obviamente)
  • ~/.program-name
  • $(datadir)/program-name

$(datadir) es una variable que puede utilizar en Makefile.am. Ejemplo:

AM_CPPFLAGS = $(ASSERT_FLAGS) $(DEBUG_FLAGS) $(SDLGFX_FLAGS) $(OPENGL_FLAGS) -DDESTDIRS=\"$(prefix):$(datadir)/:$(datadir)/program-name/\"

Por supuesto, esto depende de su salida de configure y cómo su configure.ac se parece.

Por lo tanto, basta con un envoltorio que recorrer los lugares y obtener los datos de esos directorios. Algo así como una variable PATH, excepto que implemente la iteración.

Después de escribir este post, me di cuenta de que necesito para limpiar nuestra aplicación en este proyecto, pero puede servir como un buen comienzo. Echar un vistazo a nuestra Makefile.am para el uso de $(datadir) y nuestra util.cpp y util.h para un simple envoltorio (yatc_fopen()). También hemos yatc_find_file() en caso de alguna biblioteca de terceros está haciendo el fopen()ing, como SDL_image o libxml2.

Si el programa se instala a nivel mundial:

/usr/share/app-name/glade.xml

Si desea que el programa para funcionar sin estar instalado (es decir, simplemente extraer un archivo comprimido), ponerlo en el directorio del programa.

Creo que no hay una forma estándar de colocación de archivos.Voy a construir en el programa, y yo no limitarnos a una ubicación.

Depende en gran medida de la personalización de la configuración del archivo va a ser necesario.

Empiezo por la construcción de una lista de directorios por defecto y trabajar a través de ellos hasta encontrar una instancia de glade.xml y deja de mirar, o no la encuentro y la salida de un error.Buenos candidatos para la lista de valores por defecto son /etc, /usr/share/app-name, /usr/local/etc.

Si el archivo está diseñado para ser personalizable, antes de mirar a través de los directorios por defecto, tengo una lista de los archivos de usuario y las rutas de acceso y de trabajo a través de ellos.Si no encuentra una de las versiones de usuario, luego miro en la lista de directorios por defecto.Buenos candidatos para el usuario los archivos de configuración ~/.glade.xml o ~/.app-name/glade.xml o ~/.app-name/.glade.xml.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top