3

在我的 GNU/Linux 环境中,我的软件的所有图形资源都安装在/usr/share/pixmaps. 在 Wintendo 中,一切都会进入C:\Program files\myappname. 在不同的操作系统中,在其他地方。

什么是最常见的方法、约定、良好实践,以便我可以抽象我的方式来引用我以路径/安装/构建独立方式在我的代码中打开的文件?基本上是一种引用资源路径的可移植方式。

4

1 回答 1

0

创建ifelseOS 的预处理器链定义#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/";
}

这样你只调用一个函数,并且根据你的构建目标调用正确的函数而不改变代码。

硬编码路径通常不是一个好主意,此处仅用于说明目的。您可能应该设置一个配置文件或类似文件,以允许各个系统具有单独的安装路径并且仍然能够找到资源。

于 2012-09-27T01:07:25.983 回答