Откуда мне загружать данные приложения в системах GNU/Linux?

StackOverflow https://stackoverflow.com/questions/967038

  •  12-09-2019
  •  | 
  •  

Вопрос

В данном случае я использую c с autoconf, но вопрос касается другого места.

У меня есть XML-файл Glade, который необходим во время выполнения, и я должен сообщить приложению, где он находится.Я использую autoconf для определения переменной в моем коде, которая указывает на «каталог с указанным префиксом»/имя-приложения/glade.Но это начинает работать только после установки приложения.Что, если я захочу запустить программу до этого момента?Существует ли стандартный способ определить, какие пути следует проверять для данных приложения?

Спасибо


Спасибо за ответы.Чтобы уточнить, мне не нужно знать, где установлены данные приложения (например, путем поиска в /usr,usr/local и т. д.), это делает сценарий настройки.Проблема заключалась в том, чтобы определить, установлено ли приложение.Думаю, сначала я просто проверю место установки, а если нет, то в "./src/foo.glade".

Это было полезно?

Решение

Я не думаю, что существует какой-либо стандартный способ найти такие данные.

Лично я бы сделал это таким образом, чтобы у меня был список путей, и я бы определил, смогу ли я найти файл среди любого из них, и список должен содержать DATADIR+APPNAME, определенный из autoconf, и CURRENTDIRECTORY+POSSIBLE_PREFIX, где префиксом может быть какая-то папка из корня вашей сборки.

Но в любом случае не забудьте использовать определения из autoconf для ваших файлов данных, они упрощают упаковку вашего программного обеспечения (например, deb/rpm).

Другие советы

В целом не существует предписаний, как это следует делать, но упаковщики Debian обычно устанавливают данные приложения где-то в /usr/share, /usr/lib и так далее.Они также могут внести исправления в программное обеспечение, чтобы оно читалось из соответствующих мест.Вы можете увидеть Политика Debian Чтобы получить больше информации.

Однако я могу сказать несколько слов о том, как я это делаю.Во-первых, я не ожидаю найти файл в одном каталоге;Сначала я создаю список каталогов, которые я просматриваю в своей обертке. fopen().Я считаю, что именно в этом порядке следует выполнять чтение файлов:

  • текущий каталог (очевидно)
  • ~/.program-name
  • $(datadir)/program-name

$(datadir) — это переменная, которую вы можете использовать в Makefile.am.Пример:

AM_CPPFLAGS = $(ASSERT_FLAGS) $(DEBUG_FLAGS) $(SDLGFX_FLAGS) $(OPENGL_FLAGS) -DDESTDIRS=\"$(prefix):$(datadir)/:$(datadir)/program-name/\"

Это, конечно, зависит от вашего вывода из configure и как твой configure.ac выглядит как.

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

После написания этого поста я заметил, что мне нужно почистить нашу реализацию в этот проект, но это может послужить хорошим началом.Взгляните на наш Makefile.am для использования $(datadir) и наш util.cpp и util.h для простой обертки (yatc_fopen()).У нас также есть yatc_find_file() на случай, если какая-то сторонняя библиотека выполняет fopen()например, SDL_image или libxml2.

Если программа установлена ​​глобально:

/usr/share/app-name/glade.xml

Если вы хотите, чтобы программа работала без установки (т.просто извлеките архив), поместите его в каталог программы.

Я не думаю, что существует стандартный способ размещения файлов.Я встраиваю это в программу и не ограничиваю одним местом.

Это зависит от того, насколько потребуется настройка файла конфигурации.

Я начинаю с создания списка каталогов по умолчанию и работаю над ними, пока не найду экземпляр Glade.xml и не перестану искать, или не найду его и не выйду с ошибкой.Хорошими кандидатами для списка по умолчанию являются /etc, /usr/share/app-name, /usr/local/etc.

Если файл предназначен для настройки, прежде чем я просматриваю каталоги по умолчанию, у меня есть список пользовательских файлов и путей, и я работаю с ними.Если не находит одну из пользовательских версий, то смотрю в список каталогов по умолчанию.Хорошими кандидатами для файлов конфигурации пользователя являются ~/.glade.xml или ~/.app-name/glade.xml или ~/.app-name/.glade.xml.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top