在我的 GNU/Linux 环境中,我的软件的所有图形资源都安装在/usr/share/pixmaps
. 在 Wintendo 中,一切都会进入C:\Program files\myappname
. 在不同的操作系统中,在其他地方。
什么是最常见的方法、约定、良好实践,以便我可以抽象我的方式来引用我以路径/安装/构建独立方式在我的代码中打开的文件?基本上是一种引用资源路径的可移植方式。
在我的 GNU/Linux 环境中,我的软件的所有图形资源都安装在/usr/share/pixmaps
. 在 Wintendo 中,一切都会进入C:\Program files\myappname
. 在不同的操作系统中,在其他地方。
什么是最常见的方法、约定、良好实践,以便我可以抽象我的方式来引用我以路径/安装/构建独立方式在我的代码中打开的文件?基本上是一种引用资源路径的可移植方式。
创建ifelse
OS 的预处理器链定义#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/";
}
这样你只调用一个函数,并且根据你的构建目标调用正确的函数而不改变代码。
硬编码路径通常不是一个好主意,此处仅用于说明目的。您可能应该设置一个配置文件或类似文件,以允许各个系统具有单独的安装路径并且仍然能够找到资源。