La pregunta no es muy clara. ¿La pregunta "qué mecanismos existen?", "¿Cuáles son las convenciones para los argumentos y formatos?" O "¿cómo debo mezclar y combinar?"?
Hay varias maneras bastante estándar (al menos en el mundo UNIX):
- variables de entorno
- archivos de configuración
argumentos de la línea
- comando
- como un subconjunto de los, archivos de configuración anteriores especificado en la línea de comando
Para elegir qué métodos usar para su propio programa, examine muchos programas del canon de práctica aceptada antes de congelar sus propias elecciones, leer algunos blogs, leer algunos libros ...
Los archivos de configuración son probablemente los más portátiles en todos los sistemas operativos.
El tratamiento puede llegar a ser bastante complicado.Si los argumentos de línea de comandos podrían afectar a la interpretación de los archivos de configuración o variable de entorno, pero que todavía quieren la línea de comandos para hacer caso omiso de los otros mecanismos (una buena idea) que puede necesitar tres pases:
- analizar la línea de comandos y establecer cualquier variable que afecte a otras configuraciones (digamos qué archivo de configuración leer)
- Manejar los archivos de configuración y la variable de entorno (¿en qué orden?)
- Vuelva a ejecutar la línea de comando para anular todas las demás configuraciones.
En el aspecto tradición Unix en getopt
y getopt_long
. Considere también herramientas como gengetopt
Puede simplificar su problema de archivo de configuración convirtiéndolas en scripts de shell que establecen variables de entorno (pero esto lo bloquea en un modelo de Unix). Analizar texto plano es fácil y multiplataforma, pero genera más código para escribir. El uso de un formato estándar y una biblioteca impone requisitos al entorno de compilación de su usuario, pero debe ahorrar errores y confusión.
Si su entorno de configuración es complicada, es muy útil para encapsular el estado de configuración en una estructura que puede ser pasada alrededor, según sea necesario. Este es el enfoque adoptado por gengetopt
, y lo he encontrado útil.
Ok, eliminó esa última línea :) – Tobi