これは完全にLinux固有またはDebian固有ではありません。LinuxStandardBaseやPOSIXの仕様と関係があるのではないかと思います。仕様をすぐに見つけることができませんでした。
ただし、データの種類ごとに「ベース」ディレクトリとサブディレクトリを使用しないでください。プラットフォームに依存するコードは/usr/ lib / programnameに属し、プラットフォームに依存しない読み取り専用データは/usr/share/programname/img.pngに属する必要があります。/var/lib/programname/cache.dbのアプリケーションによって変更されたデータ。または〜/ .programname / cache.dbは、それがどのような種類のアプリケーションであり、何をするかによって異なります。注:実行不可能なデータ用に/ usr / shareがすでに存在する場合は、ディレクトリを「データ化」する必要はありません。
Debian用にパッケージ化する場合は、 http: //www.debian.org/doc/manuals/developers-reference/best-pkging-practices.htmlを確認することをお勧めします。ただし、adroidやiphone、Windowsファイルのようなリソースではありません。これらのファイルは、パッケージのインストール時に実際のファイルとしてターゲットファイルシステムに抽出されます。
編集:http ://www.debian.org/doc/packaging-manuals/fhs/fhs-2.3.htmlを参照
Edit2:マルチプラットフォームソリューションに関しては、いくつかのラッパー関数を作成することをお勧めします。Windowsでは、インストーラーによって異なります。通常、プログラムのレジストリには、インストールされているディレクトリへのパスがあります。UNIXでは、データの場所が多かれ少なかれ指定されています。ターゲットプレフィックスを変更するためのビルドオプションを検討するか、環境変数を使用してデフォルトパスを上書きすることができます。Windowsでは、柔軟性が高すぎないようにするには、プレフィックスでも十分です。
オブジェクトの名前を渡し、ファイルのパスを返す関数をいくつかお勧めします。使用するツールキットによって異なりますが、Qtライブラリには同様の機能がすでに実装されている場合があります。
#include <string>
#ifdef WIN32
#define ROOT_PREFIX "c:/Program Files/"
const char DATA_PREFIX[] = ROOT_PREFIX "program/data";
#else
#define ROOT_PREFIX "/usr/"
/* #define ROOT_PREFIX "/usr/local/" */
const char DATA_PREFIX[] = ROOT_PREFIX "share/program";
#endif
std::string GetImageBasePath()
{
return std::string(DATA_PREFIX) + "/images";
}
std::string GetImagePath(const std::string &imagename)
{
// multiple directories and/or file types could be tried here, depends on how sophisticated
// it should be.
// you may check if such file does exist here for example and return only image type that does exist, if you can load multiple types.
return GetImageBasePath() + imagename + ".png";
}
class Image;
extern Image * LoadImage(const char *path);
int main(int argc, char *argv[])
{
Image *img1 = LoadImage(GetImagePath("toolbox").c_str());
Image *img2 = LoadImage(GetImagePath("openfile").c_str());
return 0;
}
開始ごとにプラットフォームに依存するルートパスを初期化できるクラス設定を作成してから、メソッドとしてSettings :: GetImagePath()を使用することをお勧めします。