3

私の GNU/Linux 環境では、私のソフトウェアはすべてのグラフィカル リソースを の下にインストールしていまし/usr/share/pixmapsた。Wintendo では、すべてが に入りC:\Program files\myappnameます。別のOSで、別の場所で。

パス/インストール/ビルドに依存しない方法で自分のコードで開くファイルを参照する方法を抽象化できるように、最も一般的な方法、規則、良い慣行は何ですか? 基本的に、リソース パスを参照する移植可能な方法です。

4

1 に答える 1

0

OSのプリプロセッサifelseチェーンを作成し#defines、関数名が正しいパスを取得する実際の関数呼び出しにマップされることを定義します。

#if _WIN32
#define GetResourcesFolderString GetResourcesFolderStringW
#elif ((macintosh) || (Macintosh) || (__APPLE__ & __MACH__))
#define GetResourcesFolderString GetResourcesFolderStringM
#elif __gnu_linux__
#define GetResourcesFolderString GetResourcesFolderStringU
//...and so on
#endif

//...Later...

std::string GetResourcesFolderStringW() {
    return "C:/Program files/myappname/"
}
std::string GetResourcesFolderStringM() {
    return "Mac folder path here";
}
std::string GetResourcesFolderStringU() {
    return "/usr/share/pixmaps/";
}

この方法では、1 つの関数のみを呼び出すだけで、ビルド ターゲットに応じて、コードを変更することなく正しい関数が呼び出されます。

パスをハードコーディングすることは、一般的には良い考えではなく、ここでは説明目的でのみ使用されています。おそらく、構成ファイルなどを設定して、個々のシステムが個別のインストール パスを持ち、リソースを見つけることができるようにする必要があります。

于 2012-09-27T01:07:25.983 に答える