GNU/Linux システムでは、アプリケーション データをどこからロードすればよいですか?
質問
この例では、autoconf で c を使用していますが、この質問は他の場所にも当てはまります。
実行時に必要な Glade XML ファイルがあり、それがどこにあるかをアプリケーションに伝える必要があります。autoconf を使用して、「指定されたプレフィックス ディレクトリ」/app-name/glade を指すコード内で変数を定義しています。ただし、それはアプリケーションがインストールされて初めて機能し始めます。その時点より前にプログラムを実行したい場合はどうすればよいですか?アプリケーション データのどのパスをチェックする必要があるかを判断する標準的な方法はありますか?
ありがとう
ご回答ありがとうございます。明確にするために、アプリ データがどこにインストールされているかを知る必要はありません (たとえば、/usr、usr/local などで検索することによって)。configure スクリプトがそれを行います。問題は、アプリがまだインストールされているかどうかを判断することでした。最初にインストール場所をチェックインし、そうでない場合は「./src/foo.glade」をチェックインすると思います。
解決
私はこのようなデータを見つける方法上の任意の標準的な方法があると思ういけない。
私は、私はパスのリストを持っているだろうと私はそれらのいずれかからファイルを見つけることができる場合、私は見つけたいとリストがautoconfのとはcurrentDirectoryから定義DATADIR + APPNAMEをcontaintべき方法でそれを行う個人的に思いますプレフィックスはビルドルートからいくつかのフォルダにあるかもしれない+ POSSIBLE_PREFIXます。
しかし、どのような場合には、データ・ファイルにはautoconfからこれらの定義を使用することを忘れていけない、それらは簡単にあなたのソフトウェアをパッケージ化するために作る(のようなDEB / RPM)
他のヒント
これを一般的にどのように行うべきかという規定はありませんが、Debian パッケージャーは通常、アプリケーション データを /usr/share や /usr/lib などのどこかにインストールします。また、ソフトウェアにパッチを適用して、適切な場所から読み取れるようにすることもあります。ご覧いただけます。 Debian ポリシー 詳細については。
ただし、私がどのようにそれを行っているかについていくつかの言葉を言うことができます。まず、ファイルが 1 つのディレクトリで見つかるとは考えていません。まず、ラッパー内で反復処理するディレクトリのリストを作成します。 fopen()
. 。ファイルの読み取りは次の順序で行う必要があると考えられます。
- 現在のディレクトリ (当然ですが)
~/.program-name
$(datadir)/program-name
$(datadir)
は Makefile.am で使用できる変数です。例:
AM_CPPFLAGS = $(ASSERT_FLAGS) $(DEBUG_FLAGS) $(SDLGFX_FLAGS) $(OPENGL_FLAGS) -DDESTDIRS=\"$(prefix):$(datadir)/:$(datadir)/program-name/\"
もちろん、これはからの出力に依存します configure
そしてあなたの様子は configure.ac
のように見える。
したがって、場所を反復処理してそれらのディレクトリからデータを取得するラッパーを作成するだけです。のようなもの PATH
ただし、反復を実装する場合を除きます。
この記事を書いた後、実装をクリーンアップする必要があることに気づきました。 このプロジェクト, しかし、それは良いスタートとして機能します。私たちのものを見てください Makefile.am
使用するための $(datadir)
そして私たちの util.cpp
そして util.h
単純なラッパーの場合 (yatc_fopen()
)。私たちも持っています yatc_find_file()
サードパーティのライブラリが実行している場合に備えて、 fopen()
SDL_image や libxml2 など。
プログラムがグローバルにインストールされている場合:
/usr/share/app-name/glade.xmlあなたは、プログラムが(すなわち、ちょうどtarballを解凍)がインストールされずに仕事をしたい場合は、
、プログラムのディレクトリに置きます。
私は、ファイルを配置する標準的な方法があるとは思いません。私はプログラムにそれを構築し、私は1つの場所にそれを制限するものではありません。
これは、設定ファイルの多くのカスタマイズが必要とされようとしている方法によって異なります。
私は、デフォルトのディレクトリのリストを構築することにより開始し、私はglade.xmlのインスタンスを検索し、探して停止、またはエラーでそれと出口が見つからないまで、それらを介して動作します。デフォルトのリストのための良好な候補であるの/ etc、は、/ usr / share /アプリ名は/ usr /ローカルの/ etcます。
ファイルが、私はデフォルトのディレクトリに目を通す前に、カスタマイズできるように設計されている場合は、、私は、ユーザーファイルとパスのリストを持っており、それらを介して動作します。それはユーザーのバージョンのうちの1つを見つけられない場合、私は、デフォルトのディレクトリのリストに見えます。ユーザー設定ファイルのための良い候補は、〜/ .glade.xmlまたは〜/ .appを-名/ glade.xmlまたは〜/ .appを-名/ .glade.xmlされます。