Заставить приложение c ++ использовать директорию файла, а не pwd

0

Я пытаюсь запустить приложение, приложение. Я делаю это, запустив. /app в каталоге приложения. Это приложение имеет зависимость, graphics/file.bmp. Все работает, когда я запускаю. /app в этом каталоге.

Если я вместо этого запускаю из родительской папки, он не может найти графику/файл.bmp при запуске. /app_directory/app

Какой самый чистый способ решить эту проблему? Я хотел бы записать cd в каталог файла независимо от того, откуда я запускаю программу. Я нахожусь в OSX и буду в восторге от решения, которое работает во всех Unix-машинах.

  • 0
    Вы можете использовать argv[0] чтобы узнать, в каком каталоге на самом деле находится ваше приложение, и затем добавить его к пути - или, если вам не важно, где вы находитесь, когда запускаете код, используйте chdir .
  • 0
    @cdhowie - это хорошее решение для меня. Вы должны опубликовать это как ответ.
Теги:
directory
macos
pwd

2 ответа

0
Лучший ответ

Вы можете сделать это в первой строке main():

chdir(dirname(argv[0]));

dirname() удаляет последний компонент пути из ввода ("a/b/c" превращается в "a/b"), и если есть только один компонент пути, он возвращает "." , Передача этого возвращаемого значения непосредственно в chdir() изменит рабочий каталог на каталог, содержащий двоичный файл.

0

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

cd app_directory
./app

После создания скрипта запустите chmod u+x <script-name>, который сделает его исполняемым. Как только это будет сделано, вы можете просто запустить ./<script-name> и он должен просто запустить вашу программу.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню