Você está na página 1de 2

Emacs e compilação — MAC122:

Notas de Aula

Estas são notas curtas sobre como o usar editor de texto Emacs
para escrever seus programas e o compilador gcc para compilar
seus programas.

Há muitos tutoriais de como usar o Emacs na internet. Para


começar, eu sugiro o seguinte guia rápido.

Código objeto¶
A execução do gcc como acima gera seu executável em duas etapas
principais: a compilação e a ligação (linking).

Na etapa de compilação, cada arquivo .c é compilado pelo gcc e


um arquivo .o é gerado como resultado. Por exemplo, após
executar o gcc como acima, você poderá verificar que os arquivos
file1.o, file2.o e file3.o foram criados em seu diretório. Esses
arquivos contém o código objeto (object code) de cada um dos
arquivos .c. Os arquivos objeto contém o programa compilado
mas referências a funções externas (por exemplo, definidas em
outros arquivos objeto ou disponibilizadas pelo sistema) ainda
não foram resolvidas.
Depois, os arquivos .o são ligados pelo linker e forma-se o
executável final.

Você pode separar essas duas etapas usando a flag -c do gcc, que
indica compilação apenas. Por exemplo, para gerar o programa
cima pode-se fazer:
gcc -Wall --std=c99 -O2 -c file1.c
gcc -Wall --std=c99 -O2 -c file2.c
gcc -Wall --std=c99 -O2 -c file3.c
gcc -Wall --std=c99 -O2 -o prog file1.o file2.o file3.o

As três primeiras linhas, por causa da flag -c, geram os arquivos


de código objeto correspondentes. A última linha gera o
programa. Note que na última linha fornecemos os arquivos de
código objeto, não os arquivos fonte originais.

A vantagem dessa abordagem é que se um dos arquivos .c for


mudado, apenas ele precisa ser recompilado. Por exemplo, se
mudamos algo dentro do arquivo file1.c, podemos refazer o
programa executando:
gcc -Wall --std=c99 -O2 -c file1.c
gcc -Wall --std=c99 -O2 -o prog file1.o file2.o file3.o

Como a etapa de ligação é muito mais rápida que a de compilação,


evita-se trabalho desnecessário. (Isso pode parecer bobagem para
você agora, mas se você tem um programa grande, como o Linux,
para compilar, isso faz uma enorme diferença!)

Você também pode gostar