Получение основной программы, чтобы узнать, где ресурсы (изображения, данные, …)

В настоящее время я создаю кроссплатформенную игру на C ++.

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

У меня была идея установить «корневой» путь для ресурсов, позволяющий мне получить доступ к подкаталогам, например, для сохранения / загрузки данных, изображений и т. Д.

В настоящее время у меня есть типичная организация проекта с открытым исходным кодом:

  • bin / (двоичные файлы)
  • включить / (заголовочные файлы)
  • источник / (источники)
  • vendor / (внешние библиотеки)
  • ресурсы / (изображения, данные и т. д.)
  • тесты / (тестовые программы)

Но как я могу реализовать это?
Использование препроцессора для передачи макроса (путь установки) может быть?

Это хорошая практика или есть лучший способ сделать это?

1

Решение

Я все еще не могу понять, как передать абсолютный путь к каталогу установки во время компиляции

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

1

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

Вы должны выяснить путь установки в зависимости от платформы. Нет портативного способа.

В принципе:

  • в Windows используйте GetModuleFileNameW ()
  • на MacOS; использовать [[NSBundle mainBundle] bundlePath] (IIRC, CFBundle оказывается намного сложнее.
  • в Linux readlink () вашего / proc /<ПИД-регулятор>/ exe ссылка, и надеюсь, что вы не были запущены через жесткую ссылку. Или просто жестко закодируйте путь, если вы все равно устанавливаете пакетный менеджер.
1