Domanda

In questo caso sto usando C con autoconf, ma la domanda si applica altrove.

Ho un file XML radura che è necessaria in fase di esecuzione, e devo dire l'applicazione in cui si trova. Sto usando autoconf per definire una variabile nel mio codice che punta alla "directory prefisso specificato" / app-name / radura. Ma che inizia solo a lavorare una volta che l'applicazione è installata. Che cosa devo fare per eseguire il programma prima di quel punto? C'è un modo standard per determinare quali percorsi dovrebbero essere controllati per i dati delle applicazioni?

Grazie


Grazie per le risposte. Per chiarire, non ho bisogno di sapere dove è installato l'applicazione dei dati (ad esempio, effettuando una ricerca in / usr, usr / local, etc etc), lo script di configurazione fa. Il problema è stato più determinare se l'applicazione è ancora stato installato. Credo che mi limiterò a check-in installare prima posizione, e se poi non in "./src/foo.glade".

È stato utile?

Soluzione

Non penso ci sia alcun modo standard su come individuare tali dati.

io personalmente faccio in un modo che mi piacerebbe avere un elenco di percorsi e mi piacerebbe a localizzare se riesco a trovare il file da nessuno di quelli e l'elenco dovrebbe containt il DATADIR + APPNAME definito da autoconf e CurrentDirectory + POSSIBLE_PREFIX dove prefisso potrebbe essere qualche cartella dal principale build.

Ma in ogni caso, non dimenticare di usare quelle definisce da autoconf per i file di dati, quelli rendere il software più facile da pacchetto (come deb / rpm)

Altri suggerimenti

Non c'è prescrizione come questo dovrebbe essere fatto in generale, ma confezionatori Debian abitualmente si installano i dati delle applicazioni da qualche parte in / usr / share, / usr / lib, eccetera. Essi possono anche correggere il software per rendere più leggere da posizioni appropriate. Si può vedere la Debian politica per ulteriori informazioni.

Posso tuttavia dire qualche parola come lo faccio. In primo luogo, non mi aspetto di trovare il file in una singola directory; Ho Innanzitutto creare una lista di directory che ho scorrere nel mio wrapper fopen(). Questo è l'ordine in cui credo che la lettura del file dovrebbe essere fatto:

  • directory corrente (ovviamente)
  • ~/.program-name
  • $(datadir)/program-name

$(datadir) è una variabile è possibile utilizzare in Makefile.am. Esempio:

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

Questo naturalmente dipende dalla vostra uscita dal configure e come il vostro configure.ac assomiglia.

Quindi, basta fare un wrapper che scorrere le posizioni e ottenere i dati da questi dirs. Qualcosa di simile a una variabile PATH, ad eccezione di implementare l'iterazione.

Dopo aver scritto questo post, ho notato che ho bisogno di ripulire la nostra implementazione in questo progetto , ma può servire come un buon inizio. Date un'occhiata al nostro Makefile.am per l'utilizzo e la nostra $(datadir) util.cpp e util.h per un semplice involucro (yatc_fopen()). Abbiamo anche yatc_find_file() nel caso in cui qualche libreria di terze parti sta facendo la fopen()ing, come ad esempio SDL_image o libxml2.

Se il programma è installato a livello globale:

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

Se si desidera che il programma di lavorare senza essere installato (vale a dire basta estrarre un tarball), metterlo nella directory del programma.

Non credo che ci sia un modo standard di posizionare i file. Costruisco nel programma, e non mi limito a una posizione.

Dipende da quanta personalizzazione del file di configurazione sta per essere richiesto.

Comincio con la costruzione di una lista di directory di default e lavorare attraverso di loro fino a quando ho trovato un esempio di glade.xml e smettere di guardare, o non lo trovo e uscire con un errore. Buoni candidati per la lista di default sono / etc, / usr / share / app-name, / usr / local / etc.

Se il file è stato progettato per essere personalizzabile, prima che guardo attraverso le directory di default, ho una lista dei file utente e percorsi e lavorare attraverso di loro. Se non trova una delle versioni di utente, poi guardo nella lista delle directory di default. Buoni candidati per i file di configurazione utente sono ~ / .glade.xml o ~ / .app-name / glade.xml o ~ / .app-name / .glade.xml.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top