UNIX ser-spoke Shell-Script / Comandos

1

Estou me acostumando a usar a interface de linha de comando (linux etc ..) e me deparei com comandos como:

git [command]

.. por exemplo

git push

Eu tenho um projeto (desenvolvido em C ++) e me pergunto se é possível poder criar comandos personalizados, por exemplo:

(suponha que meu projeto se chame 'MyProject'):

MyProject compile

Qual seria então executar o comando gcc para compilar?

Nota: Eu sei que é possível criar seus próprios comandos, como "compilar", mas eu quero criar comandos que tenham uma 'Referência' e depois o 'Comando'.

    
por Phorce 29.01.2013 / 15:05

3 respostas

3

Uma maneira mais fácil de fazer isso do que o script de shell, assim que você pegar o jeito, é usar make , que você provavelmente já viu referência antes.

Um makefile morto simples pode ter esta aparência:

myproject: myproject.cpp
    g++ myproject.cpp -o myproject

Por padrão, make escolhe o primeiro alvo se um não for especificado, já que há apenas um, neste caso, ele fará o que você vê lá. O alvo é o rótulo antes dos dois pontos (myproject); após os dois pontos são alvos de pré-requisito. Se esses destinos não estiverem listados, eles serão considerados arquivos. Nesse caso, se myproject.cpp não tiver sido alterado desde que a saída do destino myproject foi feita (o binário "myproject"), make não fará nada. Se tiver, recompila.

O valor de uso do make fica mais claro à medida que as coisas ficam mais complicadas:

flags = -Wall -g -O2

myproject: myproject.h myproject.cpp somepart.o
    g++ $(flags) somepart.o myproject.cpp -o myproject

somepart.o: somepart.h somepart.cpp
    g++ $(flags) -c somepart.cpp -o somepart.o

Os arquivos .h são pré-requisitos, pois, se você alterar um, você desejará que as peças que o requerem sejam recompiladas. Então agora você pode fazer make somepart.o apenas para compilar o objeto, ou você pode fazer make , que usará o primeiro alvo (myproject) que requer um "somepart.o" atualizado, então se isso não estiver disponível , vai fazer tudo isso também.

Fazer isso com um script bash não é tão fácil, e é provavelmente por isso que make surgiu. Infelizmente, "pegar o jeito" pode demorar um pouco. l0b0 já ligado a isso:

link

Tenha em atenção primeiro que make é sensível a espaços em branco, especialmente no que diz respeito ao uso de separadores reais e não de espaços.

    
por 29.01.2013 / 16:03
2

Para isso, você normalmente usaria make compile , mas você pode facilmente criar um script chamado MyProject , que verifica $1 para uma lista predefinida de subcomandos:

case "$1" in
    compile)
        my_compile_command(s)
        shift
        ;;
    *)
        echo "$0: Unknown command: $1"
        exit 1
        ;;
esac

Referências:

por 29.01.2013 / 15:15
2

Melhor manter os comandos padrão. Ou seja, make compila seu projeto e assim por diante. Mais fácil para os colaboradores escolherem, muito mais fácil de configurar, menos coisas aleatórias para lembrar (ou para configurar na próxima máquina / projeto). A maioria dos projetos em que você vai trabalhar não será sua, e manter esse mecanismo como um remendo por cima deles causará muitos problemas.

    
por 29.01.2013 / 16:11