Вопрос не очень понятен. Является ли вопрос «какие механизмы существуют?», «Каковы соглашения для аргументов и форматов?» Или «как вы должны смешивать и сопоставлять?»?
Есть несколько довольно стандартных способов (по крайней мере, в мире Unix):
- переменные окружения
- конфигурационные файлы
- аргументы командной строки
- как подмножество вышеупомянутых конфигурационных файлов, указанных в командной строке
Чтобы выбрать, какие методы использовать для своей собственной программы, изучите множество программ из канона принятой практики, прежде чем заморозить свой собственный выбор, прочитайте несколько блогов, прочитайте несколько книг ...
Файлы конфигурации, вероятно, являются наиболее переносимыми в операционных системах.
Лечение может быть довольно сложным. Если аргументы командной строки могут повлиять на интерпретацию файлов конфигурации или переменной среды, но вы все же хотите, чтобы командная строка отменяла другие механизмы (хорошая идея), вам может потребоваться три прохода:
- Разбор командной строки и установка любых переменных, которые влияют на дальнейшие настройки (скажем, какой файл конфигурации нужно прочитать)
- Обработка файлов конфигурации и переменных среды (в каком порядке?)
- Перезапустите командную строку, чтобы переопределить все остальные настройки.
В традиции Unix посмотрите на getopt
и getopt_long
. Также рассмотрите инструменты как gengetopt
Вы можете упростить проблему с конфигурационным файлом, создав для них сценарии оболочки, которые устанавливают переменные среды (но это блокирует вас в модели Unix). Разбор простого текста прост и кроссплатформенен, но позволяет писать больше кода. Использование стандартного формата и библиотеки предъявляет требования к среде сборки вашего пользователя, но должно экономить на ошибках и путанице.
Если ваша среда конфигурации сложна, очень полезно инкапсулировать состояние конфигурации в структуру, которую можно передавать по мере необходимости. Это подход, принятый gengetopt
, и я нашел его полезным.