Frage

In diesem Fall bin ich mit c mit autoconf, aber die Frage gilt anderswo.

Ich habe eine Lichtung XML-Datei, die zur Laufzeit benötigt wird, und ich habe die Anwendung zu sagen, wo es ist. Ich verwende autoconf eine Variable in meinem Code zu definieren, die auf das „angegebenen Präfix Verzeichnis“ Punkte / app-name / Lichtung. Aber das beginnt erst dann zu arbeiten, wenn die Anwendung installiert ist. Was passiert, wenn ich möchte das Programm vor diesem Punkt laufen? Gibt es eine standardisierte Möglichkeit zu bestimmen, welche Pfade sollte für Anwendungsdaten überprüft werden?

Danke


Danke für die Antworten. Um zu klären, ich brauche nicht zu wissen, wo die App-Daten installiert sind (zB in / usr suchen, usr / local, etc etc), der Configure-Skript tut das. Das Problem war, mehr zu bestimmen, ob die App noch nicht installiert wurden. Ich denke, ich werde einfach Check-in installieren Lage zuerst und wenn nicht, dann in „./src/foo.glade“.

War es hilfreich?

Lösung

Ich glaube nicht, dass es irgendeine übliche Weise, wie diese Daten zu lokalisieren.

Ich würde es tun persönlich in einer Weise, dass ich eine Liste von Pfaden haben würde und ich würde suchen, wenn ich die Datei von jedem derer finden können und die Liste sollte die DATADIR + APPNAME von autoconf und Current definiert containt + POSSIBLE_PREFIX wo Präfix möglicherweise einige Ordner aus Buildroot sein.

Aber in jedem Fall, vergessen Sie nicht, diese definiert von autoconf für Ihre Datendateien zu verwenden, die machen Ihre Software einfacher zu verpacken (wie deb / rpm)

Andere Tipps

Es gibt kein Rezept, wie dies in der Regel getan werden sollte, aber Debian Verpacker installiert in der Regel die Anwendungsdaten irgendwo in / usr / share / usr / lib, et cetera. Sie können auch die Software-Patch aus geeigneten Stellen lesbar zu machen. Sie können die Debian-Richtlinien für weitere Informationen.

Ich kann aber ein paar Worte sagen, wie ich es tun. Erstens erwarte ich nicht, die Datei in einem Verzeichnis zu finden; Ich erstellen zunächst eine Liste von Verzeichnissen, die ich um fopen() in meinem Wrapper durchlaufen. Dies ist die Reihenfolge, in der ich die Datei Lesung glauben sollte getan werden:

  • aktuelles Verzeichnis (natürlich)
  • ~/.program-name
  • $(datadir)/program-name

$(datadir) ist eine Variable, die Sie in Makefile.am verwenden können. Beispiel:

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

Das hängt natürlich von Ihrer Ausgabe von configure und wie Sie Ihre configure.ac aussieht.

Also, nur einen Wrapper machen, die durch die Standorte laufen wird und die Daten aus dieser dirs erhalten. So etwas wie eine PATH Variable, außer dass Sie die Iteration implementieren.

diesen Beitrags Nach dem Schreiben, bemerkte ich, ich brauche unsere Implementierung in aufzuräumen dieses Projekt , aber es kann als ein schöner Start dienen. Werfen Sie einen Blick auf unsere Makefile.am für die Verwendung von $(datadir) und unsere util.cpp und util.h für einen einfachen Wrapper (yatc_fopen()). Wir haben auch für den Fall, einige Drittanbieter-Bibliothek tut das yatc_find_file()ing, wie SDL_image oder libxml2 fopen().

Wenn das Programm global installiert:

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

Wenn Sie das Programm mögen, ohne arbeiten installiert wird (das heißt extrahiert nur einen Tarball), setzen Sie es in dem Verzeichnis des Programms.

Ich glaube nicht, dass es eine Standardmethode, um Dateien zu platzieren. Ich baue sie in das Programm, und ich beschränken sie nicht auf einen Standort.

Es hängt davon ab, wie viel Customizing der Konfigurationsdatei erforderlich sein wird.

Ich beginne mit einer Liste von Standardverzeichnissen Konstruktion und durch sie arbeiten, bis ich eine Instanz von glade.xml finden und zu stoppen suchen, oder nicht und beenden mit einem Fehler finden. Gute Kandidaten für die Standardliste sind / etc, / usr / share / app-Namen, / usr / local / etc.

Wenn die Datei anpassbar sein soll, bevor ich die Standardverzeichnisse durchschauen, habe ich eine Liste von Benutzerdateien und Pfade und durch sie arbeiten. Wenn es nicht eine der Benutzer Versionen findet, dann sehe ich in der Liste der Standardverzeichnisse. Gute Kandidaten für die Benutzerkonfigurationsdateien sind ~ / .glade.xml oder ~ / .app-name / glade.xml oder ~ / .app-name / .glade.xml.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top