Qual é a melhor prática para criar uma ferramenta de linha de comando unix / linux em C / C ++?

Atualmente tenho a tarefa de criar alguns utilitários auxiliares de linha de comando para uso da equipe de desenvolvimento interna. No entanto, quero conhecer a prática recomendada para criar ferramentas de linha de comando unix. Eu tentei vergit source code para um exemplo de como ler parâmetros e exibir mensagens de acordo. No entanto, estou procurando um modelo claro para criar uma ferramenta, ler parâmetros com segurança e exibir as mensagens padrão de "ajuda" se um usuário digitar um parâmetro incorreto ou--help Eu quero mostrar a mensagem de ajuda. Existe uma biblioteca padrão para leitura?-abcFGH e--parameter e comutando qual processo inicia baseado no parâmetro passado?

Linha de comando:

git

ou

git --help

Saída:

usage: git [--version] [--exec-path[=<path>]] [--html-path] [--man-path] [--info-path]
       [-p|--paginate|--no-pager] [--no-replace-objects] [--bare]
       [--git-dir=<path>] [--work-tree=<path>] [--namespace=<name>]
       [-c name=value] [--help]
       <command> [<args>]
...

Linha de comando:

MyTool CommandName --CommandArgs

Saída:

O que quer que esse comando específico faça.

O que eu tenho trabalhado até agora:

Código:

int main(int argc, char **argv)
{
    if(argc < 2)
    helpMessage();
    char* commandParameter = argv[1];
    if (strncmp(argv [1],"help", strlen(commandParameter)) == 0)
        helpMessage();
    else if (strncmp(argv [1],"pull", strlen(commandParameter)) == 0)
        pull();
    else
        helpMessage();
}

O que seria ideal seria assim:

Código:

int main(int argc, char **argv)
{
    MagicParameters magicParameters = new MagicParameters(argv);
    switch(magicParameters[1])
    {
        case command1:
            Command1();
            break;
        case ...

        case help:
        default:
            HelpMessage();
            break;
    }
}

questionAnswers(1)

yourAnswerToTheQuestion