Обнаружить исполняемую папку из SDL

Я создаю игровой движок C++ SDL, и важно знать путь к исполняемому файлу, поскольку изображения и другие ресурсы не хранятся в исполняемом файле — они находятся в отдельной папке ("res/").

В Linux я использую сценарий оболочки «rungame.sh», который переходит к пути к исполняемому файлу, а затем запускает исполняемый файл (используя затем «./» для ссылки на исполняемую папку). Однако я считаю, что это «уродливый» подход, и я хочу, чтобы он был совместим с Windows.

Кроме того, текущий подход не очень хорош, поскольку он может изменить значение некоторых аргументов командной строки.

Мне нужно кросс-платформенное (*NIX, Windows и Mac OS X, если возможно) решение для получения текущего пути к исполняемому файлу. Путь к игре/имя исполняемого файла может измениться.

Каков самый простой способ решить мою проблему (предпочтительно с использованием std::string и как можно меньшего количества API-интерфейсов, зависящих от платформы)?


person luiscubal    schedule 26.01.2009    source источник


Ответы (3)


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

person Jacek Ławrynowicz    schedule 26.01.2009
comment
На самом деле, это не то решение, которое мне было нужно. Это касается получения текущего пути к каталогу. Мне нужен путь к каталогу EXECUTABLE. Если я запускаю 'cd /something/', а затем запускаю './x/y', это выведет '/something/', и я хочу, чтобы он вывел '/something/x/'. - person luiscubal; 26.01.2009
comment
Оказывается, у него тоже был такой ответ. Однако вопрос был не в этом, поэтому я не смог найти его с помощью поисковой системы StackOverflow. - person luiscubal; 27.01.2009

Начиная с SDL 2.0.1 существует SDL_GetBasePath.

person philix    schedule 23.09.2014

physicsfs имеет PHYSFS_getBaseDir():

Получите путь, по которому находится приложение.

Вспомогательная функция.

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

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

person genpfault    schedule 30.07.2009