Pular para o conteúdo

C - Include e Makefile

Este artigo tem o objetivo de explicar e orientar o uso da diretiva include e do uso de Makefile em seus projetos. Suponho que você tenha um pouco (não precisa ser muito) de conhecimento em C e saiba usar o compilador gcc sobre o GNU/Linux.
Gilzamir Ferreira Gomes kaos666
Hits: 101.194 Categoria: C/C++ Subcategoria: Miscelânea
  • Indicar
  • Impressora
  • Denunciar
O Viva o Linux depende da receita de anúncios para se manter. Ative os cookies aqui para nos patrocinar.
Não conseguimos carregar os anúncios. Se usa bloqueador, considere liberar o Viva o Linux para nos patrocinar.

Parte 2: Criando um Makefile para o exemplo apresentado

Na página anterior apresentei um exemplo de como utilizar a diretiva include. Num projeto grande, compilar o programa manualmente (ou seja, sem o recurso oferecido pelo make) seria realmente desastroso.

O make é um programa que realiza uma séries de operações armazenadas em um arquivo especial, que geralmente chamados de Makefile (este nome é reconhecido por padrão pelo make). Tais operações podem ser a compilação de uma série de arquivos fontes onde haja dependência entre eles. Com a estrutura oferecida pelo Makefile, fica fácil resolver todas as dependências.

Por exemplo, no exemplo da página anterior, a compilação do arquivo main.c exige primeiro a compilação do arquivo metodos.c, pois no arquivo main.c fazemos o uso de funções localizadas naquele arquivo (metodos.c). Usar o make para o exemplo da página anterior talvez não faça muita diferença, mas para projetos maiores as vantagens tornam-se evidente. O make permite ainda que o programa compile apenas os arquivos modificados caso após a primeira compilação fizéssemos alteração em algum arquivo e resolvêssemos recompilar o programa. Para criar o executável manualmente para o exemplo da página anterior, entraríamos na pasta criada (projetoC) e executaríamos os seguintes comandos na ordem em que aparecem:

$ gcc -c metodos.c
$ gcc main.c metodos.o -o exemplo


O resultado seria o arquivo executável exemplo. Para construir um Makefile para o exemplo dado, primeiro vamos entender um pouco da estrutura de um arquivo Makefile. Um arquivo Makefile é dividido em seções. Uma dessas seções são pré-definidas, a seção all (a primeira seção a ser executada). As outras são aquelas que a seção all depende direta ou indiretamente. Estas outras seções tem seus nomes definidas pelo criador do arquivo Makefile, no caso pode ser o próprio programador ou algum programa que gere automaticamente arquivos Makefile. Como ficaria a seção all:

all:[dependência1] [dependência2] ... [dependênciaN]
[TAB][COMANDO1]
[TAB][COMANDO2]
...
[TAB][COMANDON]
[dependência1]: [dependências de 1]
...
[dependência2]: [dependências de 2]
,,,

Onde:
  • [TAB] representa uma tabulação (você pressiona a tecla TAB no início da da linha). As dependências são declaradas colocando o nome da dependência (ou regra, como também é chamada) seguido de dois pontos. Caso haja dependência para um seção, após os dois pontos os nomes das dependências devem ser colocados separados apenas por espaços, nenhum outro caractere deve ser colocado entre o nome das regras.

Cada comando numa dependência deve ser posto após uma tabulação logo abaixo da linha onde está o nome da seção. As dependências são também chamadas de regras. O exemplo abaixo mostra o Makefile para o exemplo de programa dado da página anterior (página 1). Este exemplo irá ilustrar as idéias abordadas até aqui.

Exemplo Makefile para o exemplo de programa dado na página anterior: dentro da pasta projetoC cria o seguinte arquivo (nomeado Makefile):

Arquivo Makefile:

O Viva o Linux depende da receita de anúncios para se manter. Ative os cookies aqui para nos patrocinar.
Não conseguimos carregar os anúncios. Se usa bloqueador, considere liberar o Viva o Linux para nos patrocinar.
all:METODOS
	gcc main.c metodos.o -o exemplo
METODOS:
	gcc -c metodos.c

Agora, dentro da pasta projetoC, execute o comando "make". O resultado será um arquivo compilado denominado exemplo. Para obter informações sobre o compilador gcc, no terminal execute o seguinte comando:

$ man gcc

Para mais informações sobre o comando make, consulte a página de manual do make também executando o comando man como segue:

$ man make

Essas duas últimas instruções só são válidas se as páginas de manual das ferramentas mencionadas estiverem instaladas em seu sistema GNU/Linux.

O Viva o Linux depende da receita de anúncios para se manter. Ative os cookies aqui para nos patrocinar.
Não conseguimos carregar os anúncios. Se usa bloqueador, considere liberar o Viva o Linux para nos patrocinar.
   1. A diretiva include
   2. Criando um Makefile para o exemplo apresentado
   3. Conclusão

Mono e C# (parte 1)

Ser livre, mas manter padrões

Mono e C# (parte 2)

Mono - Por que usá-lo?

Programando com uma granada de mão: uma visão da linguagem C

Utilizando a biblioteca NCURSES - Parte I

Reprodução de arquivos WAV com SDL_mixer e linguagem C

Ponteiros void na linguagem C

Detectando assalto na multidão com visão computacional

#1 Comentário enviado por agk em 19/04/2005 - 16:40h
Legal o artigo, parabéns, pena que não entendo nada de C e não consegui nem sequer fazer funcionar esse pequenos exemplos.
#2 Comentário enviado por goajunior em 20/04/2005 - 12:21h
Legal o artigo, parabéns, uma pergunta, supondo que o objeto metodos.o já esteja compilado e eu não quero recompilá-lo, apenas quero inserí-lo no objeto do meu programa, como eu faço isso no Makefile ?
#3 Comentário enviado por kaos666 em 21/04/2005 - 00:06h
você não precisa fazer nada, o make faz isso para você.
#4 Comentário enviado por kernel_sys em 10/10/2005 - 13:38h
Legal o artigo parabens
#5 Comentário enviado por italo em 14/03/2008 - 20:28h
Fui brincar com o Makefile e surgiu uma duvida ou bug sei la. fiz um pequeno programa em c, com apenas um printf e uma chamada ao sistema.

#include <stdio.h>

int main(){
printf("Entrando na net!\n");
system("firefox uol.com.br");
return 0;
}

e escrevi meu Makefile:
net:
gcc net.c -o net
rodei a 1 vez e deu td blza. Entaum resolvi adicionar mais uma linha no main
system("ls -a");

salvei. rodei o make e ele disse que meu programa ja tava atualizado "up-date" e quando rodei ele rodou a versao antiga, sem a chamada
system("ls -a");

pq??? sera que ele naum consegui identificar que o arq foi modificado?? ou deixei de explicitar alguma coisa no Makefile???

quem quiser mandar a resposta via e-mail: soutoitalo [at] gmail.com
#6 Comentário enviado por delmarcs em 15/09/2009 - 11:14h
Excelente artigo.

Contribuir com comentário

Entre na sua conta para comentar.