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".