Хороший способ узнать путь к ресурсам независимо от пути / установки / сборки

В моей среде GNU / Linux мое программное обеспечение будет иметь все свои графические ресурсы, установленные под /usr/share/pixmaps, В Wintendo все пошло бы на C:\Program files\myappname, В другой ОС, где-то еще.

Каковы наиболее распространенные способы, соглашения, передовые практики, чтобы я мог абстрагироваться от ссылок на файлы, которые я открываю в своем коде, независимо от пути / установки / сборки? В основном это портативный способ ссылки на пути к ресурсам.

3

Решение

Создать препроцессор 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/";
}

Таким образом, вы вызываете только одну функцию, и в зависимости от цели сборки вызывается правильная функция без изменений в коде.

Жесткое кодирование путей, как правило, не очень хорошая идея и используется здесь только в целях иллюстрации. Вероятно, вам следует настроить файл конфигурации или аналогичный, чтобы отдельные системы могли иметь отдельные пути установки и при этом иметь возможность находить ресурсы.

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]