Compilar e vincular são as duas principais etapas na criação de um executável. Ambos podem ser feitos com o comando gcc . Há também uma etapa de pré-processamento (antes da compilação) e uma montagem (após a compilação); estes são quase sempre feitos ao mesmo tempo que compilar, então a combinação "preprocess e compilar e depois montar" é tratada como uma única etapa chamada "compilação" para breve.
As etapas executadas por uma determinada linha de comando gcc podem ser determinadas da seguinte maneira:
Anote o pedido "preprocess, compile, assemble, link".
Se o arquivo de entrada tiver o nome *.i , remova a etapa de pré-processamento ( .i arquivos já estão pré-processados).
Se o arquivo de entrada tiver o nome *.s , remova as etapas de pré-processamento e compilação ( .s arquivos já estão compilados).
Se o arquivo de entrada tiver o nome *.o , remova as etapas de pré-processamento, compilação e montagem ( .o arquivos são montados).
Se houver uma opção -x , use-a em vez do nome do arquivo de entrada nas etapas anteriores. (Isso é raro)
Se a opção -c for usada, remova a etapa do link.
Se a opção -S for usada, remova as etapas de montagem e vinculação.
Se a opção -E for usada, remova as etapas de compilação, montagem e vinculação.
Em resumo, o tipo do arquivo de entrada determina onde você inicia na seqüência de pré-processamento-compilar-montagem-link e as opções -c / -S / -E determinam onde você para (elas solicitam arquivos de saída do tipo *.o , *.s e *.i , respectivamente - embora -E seja gerado para stdout por padrão).
Sua linha de comando não possui nenhuma das opções de tipo de saída e seu arquivo de entrada é denominado *.c , portanto, é uma linha de compilação e uma linha de link. Esta é uma maneira normal de compilar pequenos programas. Com programas maiores, você geralmente não quer compilar tudo de uma vez. É melhor salvar os arquivos *.o intermediários para reutilização e apenas recompilá-los quando o arquivo de origem for alterado.
O ciclo de desenvolvimento "recompilar conforme necessário" envolve comandos gcc -c para criar os arquivos *.o , geralmente um de cada vez, e um comando gcc *.o -o theprogram para fazer a vinculação. Esses comandos são comumente encontrados em um Makefile e são chamados de "linhas de compilação" e "linhas de link".