3

この例では、autoconf で c を使用していますが、問題は他の場所にも当てはまります。

実行時に必要なグレイド xml ファイルがあり、その場所をアプリケーションに伝える必要があります。autoconf を使用して、「指定されたプレフィックス ディレクトリ」/app-name/glade を指すコード内の変数を定義しています。しかし、それはアプリケーションがインストールされて初めて機能し始めます。その時点より前にプログラムを実行したい場合はどうすればよいですか? アプリケーション データをチェックする必要があるパスを決定する標準的な方法はありますか?

ありがとう


回答ありがとうございます。明確にするために、アプリ データがどこにインストールされているかを知る必要はありません (たとえば、/usr、usr/local などで検索することによって)。configure スクリプトがそれを行います。問題は、アプリがまだインストールされているかどうかを判断することでした。最初にインストール場所をチェックインし、そうでない場合は「./src/foo.glade」にチェックインすると思います。

4

4 に答える 4

1

これを一般的にどのように行うべきかという規定はありませんが、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)our と私たちのutil.cppandを見てください。また、SDL_image や libxml2 などのサードパーティ ライブラリが ing を実行している場合もあります。util.hyatc_fopen()yatc_find_file()fopen()

于 2009-06-08T22:32:18.907 に答える
0

ファイルを配置する標準的な方法はないと思います。私はそれをプログラムに組み込み、1 つの場所に限定しません。

構成ファイルのカスタマイズがどの程度必要になるかによって異なります。

デフォルト ディレクトリのリストを作成することから始めて、glade.xml のインスタンスを見つけて検索を停止するか、見つからずにエラーで終了するまで、それらを調べます。デフォルト リストの適切な候補は、/etc、/usr/share/app-name、/usr/local/etc です。

ファイルがカスタマイズできるように設計されている場合、デフォルトのディレクトリを調べる前に、ユーザー ファイルとパスのリストを用意して、それらを調べます。ユーザー バージョンのいずれも見つからない場合は、デフォルト ディレクトリのリストを調べます。ユーザー構成ファイルの適切な候補は ~/.glade.xml または ~/.app-name/glade.xml または ~/.app-name/.glade.xml です。

于 2009-06-08T21:59:36.710 に答える
0

プログラムがグローバルにインストールされている場合:

/usr/share/アプリ名/glade.xml

プログラムをインストールせずに動作させたい場合 (つまり、tarball を抽出するだけ)、プログラムのディレクトリに配置します。

于 2009-06-08T21:11:38.507 に答える