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

A diretiva include

Vamos começar pela diretiva include, depois prosseguiremos com o nosso exemplo (durante todo o artigo iremos abordar um só exemplo). Para programas escritos em C, antes da compilação propriamente dita, há um processo que chamamos de pré-compilação.

O papel das diretivas é instruir o pré-processador (parte do compilador responsável pelo pré-processamento) a realizar determinadas tarefas.

A diretiva define, por exemplo, instrui o pré-processador a substituir um texto por outro texto no código-fonte do programa.

A diretiva include instrui o pré-processador a incluir num arquivo-fonte o conteúdo de um outro arquivo, geralmente chamado de header file (arquivo de cabeçalho). Estes arquivos de cabeçalho tem extensão .h, como em stdio.h.

Nosso exemplo constará de 3 arquivos:
  • main.c;
  • metodos.h;
  • e metodos.c.

Convencionalmente, arquivos terminados com extensão .c são arquivos-fonte escritos em C. E, como dito antes, arquivos com extensão .h são arquivos de cabeçalho. Os arquivos de cabeçalhos geralmente contém declarações de funções e variáveis definidas em outros arquivos com extensão .c. Isso é necessário e importante, pois centraliza todas as declarações de um ou mais arquivos fontes em um ou mais arquivos de cabeçalho.

Se quisermos usar os métodos definidos em metodos.c em main.c, devemos colocar uma declaração include no arquivo main.c "apontando" para o arquivo metodos.h. Vamos começar o nosso exemplo. Na sua pasta pessoal crie outra pasta com o nome "projetoC". Agora crie os seguintes arquivos dentro da pasta projetoC:

Arquivo metodos.c:

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.
#include <stdio.h>

static int global;

void IniciaGlobal()
{
   global =  0;
}

int GetGlobal()
{
    return global;
}

void Metodo1()
{
   printf("metod 1");
   global++;
}

void Metodo2()
{
   printf("metodo 2");
   global++;
}

Arquivo metodos.h:

#ifndef METODOS_H
#define METODOS_H
void IniciaGlobal();
int GetGlobal();
void Metodo1();
void Metodo2();
#endif


Arquivo main.c:

include "metodos.h"
include <stdio.h>

main()
{

     IniciaGlobal();
     Metodo1();
     printf("\n");
     Metodo2();
    printf("\n Número de acessos aos metodos do arquivo metodos.c = %d",GetGlobal());
    return 0;
}

Explicando um pouco:

O arquivo main.c contém duas diretivas include. Observe que há duas formas diferentes de incluir um arquivo: usando aspas e usando os símbolos < e >.

O uso de aspas indica ao pré-processador a buscar o arquivo inicialmente dentro do diretório onde main.c está e só depois procurar em outros diretórios .

O uso dos símbolos < e > instrui o pré-processador a buscar o arquivo incluído no diretório include padrão do compilador ou do sistema. No caso do Linux esse diretório pode ser /usr/include. No entanto, o padrão ANSI/C deixa a coisa um pouco solta, permitindo assim flexibilidade para os compiladores adaptarem a idéia de acordo com a plataforma onde os programas compilados serão executados.

Na próxima página irei abordar como criar um Makefile para o exemplo dado. A partir do arquivo Makefile apresentado, você terá a base para compreender outros mais complexos.

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 - Por que usá-lo?

Mono e C# (parte 1)

Mono e C# (parte 2)

Ser livre, mas manter padrões

Ponteiros void na linguagem C (parte 2)

Gerencie suas contas financeiras pessoais com Terminal Finances

Utilizando a biblioteca NCURSES - Parte I

Tutorial OpenGL

Substituindo a biblioteca conio.h no Linux usando ncurses curses.h

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