22
Módulos e Compilação em Separado Neste tópico abordaremos a possibilidade de uma aplicação ser composta por vários módulos e como utilizar o utilitário make para facilitar a compilação da aplicação

LP-03-Modulos (1)

Embed Size (px)

Citation preview

  • Mdulos e Compilao em Separado

    Neste tpico abordaremos a possibilidade de uma aplicao ser composta por vrios

    mdulos e como utilizar o utilitrio make para facilitar a compilao da aplicao

  • 2Mdulos

    Um programa em C pode ser divido em vrios arquivos-fontes

    Em aplicaes grandes comum identificar funes afins e agrup-las por arquivos que chamamos de mdulos Assim, a implementao de um programa

    pode ser composta por um ou mais mdulos Facilita a diviso de uma tarefa complexa

    em tarefas menores (dividir para conquistar) Reaproveitamento de cdigo

  • 3Compilao em separado

    No caso de um programa com vrios mdulos, cada um deles deve ser compilado separadamente, gerando um arquivo objeto (extenso .o) para cada mdulo

    Aps a compilao de todos os mdulos, uma outra ferramenta, denominada ligador ou linkeditor, usada para juntar todos os arquivos objetos em um nico executvel

  • 4Mdulos e compilao em separado

    Para ilustrar o uso de mdulos em C, vamos considerar a existncia de um arquivo my_io.c que contm a implementao das funes de entrada de dados read_line e read_int

  • 5Programa my_io.c (1/2)#include#include#defineMAX_LENGTH120

    voidread_line(charline[],intmax_length){inti=0;charch;

    while((ch=getchar())!='\n'){if(i

  • 6Programa my_io.c (2/2)

    boolread_int(int*inteiro){intresult;

    charline[MAX_LENGTH+1];read_line(line,MAX_LENGTH);result=sscanf(line,"%d",inteiro);return(result==1);}

  • 7Programa prog1.c#include#includevoidread_line(char*,int);boolread_int(int*);intmain(){intn;printf("Tamanhodastring(min.5):");while(!read_int(&n)||n
  • 8Mdulos e compilao em separado

    A partir desses dois arquivos-fontes (my_io.c e prog1.c), podemos gerar um programa executvel compilando cada um separadamente e depois ligando-os em um nico arquivo executvel

    Por exemplo: gcccmy_io.c gcccprog1.c gccoprog1prog1.omy_io.o

  • 9Mdulos e compilao em separado

    Para que outros programas utilizem o mdulo my_io.c, eles precisam conhecer os prottipos das funes oferecidas por my_io.c

    No exemplo anterior isso foi resolvido por meio da repetio dos prottipos no incio do arquivo prog1.c

    Isto invivel para mdulos com muitas funes ou se desejarmos usar funes de muitos mdulos

  • 10

    Mdulos e compilao em separado

    Para contornar esse problema, todo mdulo de funes C costuma estar associado a um arquivo de cabealho (.h) que contm apenas os prottipos das funes oferecidas pelo mdulo e, s vezes, os tipos de dados exportados

    Este arquivo caracteriza a interface do mdulo

    Em geral possui o mesmo nome do mdulo s que com a extenso .h

  • 11

    my_io.h/*my_io.h*Funesoferecidaspelomdulomy_io.c*/#ifndef_MY_IO_H#define_MY_IO_H#defineMAX_LENGTH120//comprimentomximodaentrada#include

    /*Funoread_line:lumalinhadotecladocujotamanhomximo*dadopelo2argumentoeaarmazenano1argumento*/voidread_line(char*,int);

    /*Funoread_int:lumalinhadotecladoearmazenaemseu*parmetrosealinhacontiveruminteiroedevolveverdadeiro,*casocontrrio,devolvefalso*/boolread_int(int*);

    #endif

    Retire a definio desta constante do

    my_io.c

  • 12

    Mdulos e compilao em separado

    uma boa prtica comentar as funes oferecidas por um mdulo

    Para evitar que o mesmo arquivo .h seja includo por mais de um mdulo de uma aplicao, costuma-se definir uma constante que identifica o mdulo e verificar se esta constante ainda no foi definida

    Por conveno o nome da constante _NOMEDOMDULO_H

  • 13

    Mdulos e compilao em separado

    Agora, em vez de repetir manualmente os prottipo das funes, basta apenas incluir o arquivo .h

    Por exemplo:#include#include"my_io.h"intmain(){...}

    Os arquivos de cabealho das funes da biblioteca padro de C so includos da forma #include

    Os arquivos de cabealho de nossos mdulos so geralmente includos da forma #include"arquivo.h"

  • 14

    make make uma ferramenta que controla a

    gerao de arquivos executveis e objetos a partir dos programas-fontes da aplicao

    O make obtm as informaes de como construir a aplicao a partir de um arquivo chamado makefile, que lista cada arquivo objeto ou executvel e como ger-lo a partir de outros arquivos

  • 15

    Dependncias O make cria o programa a partir de suas dependncias descritas no arquivo makefile

    Por exemplo, para criar um arquivo objeto, programa.o, necessrio pelo menos o arquivo programa.c (pode haver outras dependncias, como arquivos de cabealho .h)

  • 16

    make Grafo de dependncias

  • 17

    make Grafo de dependncias

    editado

  • 18

    makefile O arquivo makefile ou Makefile

    determina o relacionamento entre arquivos-fontes, objetos e executvel

    Uma dependncia no makefile definida da seguinte formatarget:dependncia1dependncia2...

    comandoparagerartargettabulao

  • 19

    makefile Exemplo de um

    makefileproject1:main.odata.oio.o

    gccoproject1main.odata.oio.o

    main.o:main.cdata.hio.h

    gcccmain.c

    data.o:data.cdata.h

    gcccdata.c

    io.o:io.cio.h

    gcccio.c

  • 20

    makefile Aps criar seu makefile e os

    arquivos-fontes de sua aplicao, basta digitar make no terminal

    Se voc no quiser chamar seu arquivo de dependncias de makefile ou Makefile, voc pode digitar makefmymakefile

    A ordem das dependncias importante, pois o make tentar criar ou atualizar a primeira dependncia listada

  • 21

    Exerccios

    1)Crie um arquivo makefile para a aplicao mostrada como exemplo nesta aula.

    2)Acrescente ao mdulo my_io as funes read_float, read_double e read_char.

    3)Crie um mdulo my_math com as funes fatorial, arredondarParaInt e arredondar.

    4)Implemente uma aplicao que use o mdulo my_math. Crie um makefile para esta aplicao.

  • 22

    Referncias

    CELES, W.; CERQUEIRA, R.; RANGEL, J.L.. Introduo a Estruturas de Dados. Elsevier, 2004.

    PRATA. Stephen. C Primer Plus. 5. ed., Sams, 2005.

    GNU Project. GNU Make. Disponvel em http://www.gnu.org/software/make.

    Slide 1Slide 2Slide 3Slide 4Slide 5Slide 6Slide 7Slide 8Slide 9Slide 10Slide 11Slide 12Slide 13Slide 14Slide 15Slide 16Slide 17Slide 18Slide 19Slide 20Slide 21Slide 22