2014-04-27 3 views
0

Конечная цель состоит в том, чтобы конечные пользователи/администраторы могли устанавливать параметры программы с помощью комбинации переключателей CLI (то есть "--foo=31 --bar=0") и/или конфигурационных файлов (то есть). Этот язык является C++, хотя многие из них не очень значительны. Цель - GNU/Linux на чем угодно: от ARMv6 (Raspberry Pi) до x86_64.Рекомендуемый подход к настройке Config/Prefs

Существует два очевидных решения: запись парсеров argc/v и conf файлов с использованием стандартных стандартных функций библиотеки; OR, используя существующую библиотеку, такую ​​как libconfig. Моя предыдущая практика заключалась в том, чтобы всегда использовать библиотеки, а не изобретать колеса; но это первый раз, когда я нацелен на встроенные платформы. Это заставляет меня задаться вопросом, перерасход отходов и риск ошибок, связанных с почерком, этот код перевешивает преимущества меньшего количества зависимостей и возможного меньшего кода.

Вопрос тогда в этом случае, что делать? И есть ли правила, используемые при оценке выбора между библиотекой vs roll-your-own для мультиплатформенного кода?

ответ

1

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

Для встроенного Linux в отношении следа вы должны думать о более крупном изображении. Является ли ваше приложение единственным, кому нужен libconfig? Будут ли другие приложения для rootfs нужны такие вещи, как libxml? В этом случае - используйте libxml. Поэтому проверьте свои rootfs для похожих библиотек.

Во-вторых, вы говорите о прибл. 150kB дисковое пространство. Неужели стоит потратить на это все неприятности? Существует значительное количество пакетов больше, чем это, поэтому возможность разбить другой пакет из вашего списка может быть лучшим способом потратить ваши усилия. Не беспокойтесь об использовании ОЗУ - это будет еще меньше. Linux будет загружать только страницы кода и данных с диска, когда они будут использоваться.

+0

Я экспериментировал с boost :: program_options и с json (поскольку я ненавижу XML). Boost на любом нормальном дистрибутиве GNU/Linux-ARM/MIPS работает хорошо. Boost на Android/Linux кажется сложной задачей. Я просматриваю некоторые пакеты на FDroid, чтобы узнать, какие общие библиотеки. Я считаю, что вы предлагаете, что «использование существующих пакетов всегда полезно» в сочетании с поиском активных мультиплатформенных библиотек - это путь. Благодарю. – justinzane