Você está na página 1de 34

MakeFiles

Alexandre Savelli Bencz


13 de setembro de 2013

Makefile
O que um
Makefile ?
Vantagens
Mo na
massa...
Explicao
Projeto Latex

Makefile

Projeto
Allegro
Referencias

MakeFiles

13 de setembro de 2013

slide 2

O que um Makefile ?
Makefile
O que um
Makefile ?

Makele um arquivo que contem uma srie de intrues


de compilao

Vantagens
Mo na
massa...
Explicao
Projeto Latex
Projeto
Allegro
Referencias

MakeFiles

13 de setembro de 2013

slide 3

O que um Makefile ?
Makefile
O que um
Makefile ?

Makele um arquivo que contem uma srie de intrues


de compilao

O arquivo Makele processado por um programa


denominado make

Vantagens
Mo na
massa...
Explicao
Projeto Latex
Projeto
Allegro
Referencias

MakeFiles

13 de setembro de 2013

slide 3

O que um Makefile ?
Makefile
O que um
Makefile ?

Makele um arquivo que contem uma srie de intrues


de compilao

O arquivo Makele processado por um programa


denominado make

As linhas de comando existentes no arquivo Makele,


podem realizar varias tarefas, tais como:

Vantagens
Mo na
massa...
Explicao
Projeto Latex
Projeto
Allegro
Referencias

MakeFiles

Criao de diretorios

13 de setembro de 2013

slide 3

O que um Makefile ?
Makefile
O que um
Makefile ?

Makele um arquivo que contem uma srie de intrues


de compilao

O arquivo Makele processado por um programa


denominado make

As linhas de comando existentes no arquivo Makele,


podem realizar varias tarefas, tais como:

Vantagens
Mo na
massa...
Explicao
Projeto Latex
Projeto
Allegro
Referencias

Criao de diretorios

Limpeza de arquivos temporarios

MakeFiles

13 de setembro de 2013

slide 3

O que um Makefile ?
Makefile
O que um
Makefile ?

Makele um arquivo que contem uma srie de intrues


de compilao

O arquivo Makele processado por um programa


denominado make

As linhas de comando existentes no arquivo Makele,


podem realizar varias tarefas, tais como:

Vantagens
Mo na
massa...
Explicao
Projeto Latex
Projeto
Allegro
Referencias

Criao de diretorios

Limpeza de arquivos temporarios

Execuo de comandos

MakeFiles

13 de setembro de 2013

slide 3

Vantagens
Makefile
O que um
Makefile ?

A linguagem Make, uma linguagem script comum.

Vantagens
Mo na
massa...
Explicao

Evita a compilao inteira de grandes projetos.

Facilita tarefas rotineiras.

Projeto Latex
Projeto
Allegro
Referencias

Mas a linguagem make muito mais utilizada para o


tratamento de compilao de projetos.

Pequeno exemplo de um script em Make:


a=10
b=10
soma=$ ( ( $a + $b ) )
echo ${soma}

MakeFiles

13 de setembro de 2013

slide 4

Makefile
Mo na
massa...
A primeira
vez...
main.c
operacoes.c
comum.h

Mo na massa...

operacoes.h
Makefile
Explicao
Projeto Latex
Projeto
Allegro
Referencias

MakeFiles

13 de setembro de 2013

slide 5

A primeira vez...
Makefile
Mo na
massa...
A primeira
vez...
main.c
operacoes.c
comum.h
operacoes.h
Makefile
Explicao
Projeto Latex
Projeto
Allegro

Para iniciarmos com a construo do MakeFile,


precisaremos criar um simples projetinho, onde este
simples projeto vai trabalhar com 4 arquivos, 2 headers e 2
arquivos fontes.

main.c

operacoes.c

comum.h

operacoes.h

Referencias

MakeFiles

13 de setembro de 2013

slide 6

main.c
Makefile
Mo na
massa...
A primeira
vez...
main.c
operacoes.c
comum.h
operacoes.h
Makefile
Explicao
Projeto Latex
Projeto
Allegro

#include "comum . h "


int main ( )
{
p r i n t f ( "SUM=>%d\n " , sum ( 1 0 , 1 0 ) ) ;
p r i n t f ( "SUB=>%d " , sub ( 1 0 , 5 ) ) ;
return 0 ;
}

Referencias

MakeFiles

13 de setembro de 2013

slide 7

operacoes.c
Makefile
Mo na
massa...
A primeira
vez...
main.c
operacoes.c
comum.h
operacoes.h
Makefile

#include "comum . h "


int sum ( int a , int b )
{
return a+b ;
}

Explicao
Projeto Latex
Projeto
Allegro
Referencias

int sub ( int a , int b )


{
return ab ;
}

MakeFiles

13 de setembro de 2013

slide 8

comum.h
Makefile
Mo na
massa...
A primeira
vez...

#i f n d e f _H_COMUM
#define _H_COMUM

main.c
operacoes.c
comum.h
operacoes.h

#include <s t d i o . h>


#include " o p e r a c o e s . h "

Makefile
Explicao
Projeto Latex

#endif

Projeto
Allegro
Referencias

MakeFiles

13 de setembro de 2013

slide 9

operacoes.h
Makefile
Mo na
massa...
A primeira
vez...

#i f n d e f _H_OPERACOES
#define _H_OPERACOES

main.c
operacoes.c
comum.h
operacoes.h

int sum ( int a , int b ) ;


int sub ( int a , int b ) ;

Makefile
Explicao
Projeto Latex

#endif

Projeto
Allegro
Referencias

MakeFiles

13 de setembro de 2013

slide 10

Makefile
Makefile
Mo na
massa...
A primeira
vez...
main.c
operacoes.c
comum.h

a l l : exemplo
exemplo : o p e r a c o e s . o main . o
g c c o exemplo . exe main . o o p e r a c o e s . o

operacoes.h
Makefile
Explicao
Projeto Latex
Projeto
Allegro
Referencias

operacoes . o : operacoes . c
g c c o o p e r a c o e s . o c o p e r a c o e s . c W Wall
main . o : main . c
g c c o main . o c main . c W Wall
clean :
rm r f . o
Para compilar, basta abrir o terminal ou cmd, navegar at o
diretorio do projeto, e digitar: make
MakeFiles

13 de setembro de 2013

slide 11

Makefile
Mo na
massa...
Explicao
Sintaxe
Chamando
uma regra
Criando
variaveis
Variaveis
automaticas
Variaveis
internas
Regra
.PHONY
Re-escrevendo
o Makefile 1
Re-escrevendo
o Makefile 2

Explicao

Projeto Latex
Projeto
Allegro
Referencias

MakeFiles

13 de setembro de 2013

slide 12

Sintaxe
Makefile
Mo na
massa...
Explicao
Sintaxe
Chamando
uma regra
Criando
variaveis
Variaveis
automaticas
Variaveis
internas
Regra
.PHONY
Re-escrevendo
o Makefile 1
Re-escrevendo
o Makefile 2
Projeto Latex
Projeto
Allegro
Referencias

Sintaxe da linguagem make:


o b j e t i v o : [<dep1> [ < . . . > ] ]
<tab>comando
<tab>comando
<tab > . . .
A regra, ou tambm chamado de objetivo, "all", a primeira
regra a ser processada pelo make, quando o arquivo Makele
aberto pelo make, e suas dependencias so processadas na
ordem colocada pelo programador.
a l l : c r i a D i r msgOi
msgOi :
@echo Oi : )
criaDir :
@mkdir exemplo
MakeFiles

13 de setembro de 2013

slide 13

Chamando uma regra


Makefile
Mo na
massa...
Explicao
Sintaxe
Chamando
uma regra
Criando
variaveis
Variaveis
automaticas
Variaveis
internas
Regra
.PHONY
Re-escrevendo
o Makefile 1
Re-escrevendo
o Makefile 2
Projeto Latex
Projeto
Allegro
Referencias

As regras criadas no arquivo makele podem ser chamadas


por linha de comando, para realizar est chamada, pasta
apenas passar o nome da regra que voc deseja executar, como
argumento do make.
make
make
make
make
...

clean
install
MkDirObj
informacoes

executando o make, utilizando como parametro alguma regra


citada dentro do makele que o make vai executar, apenas a
regra executada, considerando tambm, suas devidas
dependencias.

MakeFiles

13 de setembro de 2013

slide 14

Criando variaveis
Makefile

Mo na
massa...

Sintaxe
<NOME>=<VALOR>

Explicao
Sintaxe
Chamando
uma regra
Criando
variaveis
Variaveis
automaticas
Variaveis
internas
Regra
.PHONY
Re-escrevendo
o Makefile 1
Re-escrevendo
o Makefile 2
Projeto Latex
Projeto
Allegro
Referencias

Utilizao da variavel
$(<NOME>)

Exemplo:
CC=g c c
CFLAGS=W Wall
a l l : exc
exc : ope . o main . o
$ (CC) o exc . exe main . o ope . o
ope . o : ope . c
$ (CC) o ope . o c ope . c $ (CFLAGS)
...
MakeFiles

13 de setembro de 2013

slide 15

Variaveis automaticas
Makefile
Mo na
massa...
Explicao
Sintaxe
Chamando
uma regra
Criando
variaveis
Variaveis
automaticas
Variaveis
internas
Regra
.PHONY
Re-escrevendo
o Makefile 1
Re-escrevendo
o Makefile 2

Com a denio de uma variavel chamada SRC, podemos


dizer para o make, quais so os arquivos fonte que iremos
compilar, e juntamente com a denio desta variavel,
precisamos dizer para o make, quais so os arquivos
objetos.

SRC = main.c operacao.c


OBJ = main.o operacao.o

Projeto Latex
Projeto
Allegro
Referencias

MakeFiles

13 de setembro de 2013

slide 16

Variaveis automaticas
Makefile

Mo na
massa...
Explicao
Sintaxe
Chamando
uma regra
Criando
variaveis
Variaveis
automaticas
Variaveis
internas
Regra
.PHONY
Re-escrevendo
o Makefile 1
Re-escrevendo
o Makefile 2
Projeto Latex
Projeto
Allegro
Referencias

Com a denio de uma variavel chamada SRC, podemos


dizer para o make, quais so os arquivos fonte que iremos
compilar, e juntamente com a denio desta variavel,
precisamos dizer para o make, quais so os arquivos
objetos.

SRC = main.c operacao.c


OBJ = main.o operacao.o

Existe uma forma para simplicar este sistema onde no


se torna necessario, literalmente, escrever o nome do
arquivo objeto para o make, neste outro formato, apenas
dizemos que o OBJ(s) igual ao SRC mas com a exteno
diferente.

MakeFiles

SRC = main.c operacao.c


OBJ = $(SRC:.c=.o)
13 de setembro de 2013

slide 16

Variaveis automaticas
Makefile

Mo na
massa...
Explicao
Sintaxe
Chamando
uma regra
Criando
variaveis
Variaveis
automaticas
Variaveis
internas
Regra
.PHONY
Re-escrevendo
o Makefile 1
Re-escrevendo
o Makefile 2
Projeto Latex
Projeto
Allegro
Referencias

Com a denio de uma variavel chamada SRC, podemos


dizer para o make, quais so os arquivos fonte que iremos
compilar, e juntamente com a denio desta variavel,
precisamos dizer para o make, quais so os arquivos
objetos.

SRC = main.c operacao.c


OBJ = main.o operacao.o

Existe uma forma para simplicar este sistema onde no


se torna necessario, literalmente, escrever o nome do
arquivo objeto para o make, neste outro formato, apenas
dizemos que o OBJ(s) igual ao SRC mas com a exteno
diferente.

MakeFiles

SRC = main.c operacao.c


OBJ = $(SRC:.c=.o)
13 de setembro de 2013

slide 16

Variaveis internas
Makefile
Mo na
massa...
Explicao
Sintaxe
Chamando
uma regra
Criando
variaveis
Variaveis
automaticas
Variaveis
internas
Regra
.PHONY
Re-escrevendo
o Makefile 1
Re-escrevendo
o Makefile 2

O make possui ferramentas para facilitar o desenvolvimento


de um make, que tenha que tratar de muitos arquivos, por
exemplo, um projeto com 500 arquivos.
$@
$<
$^
$?
$

#
#
#
#
#

nome da r e g r a
Nome da p r i m e i r a d e p e n d e n c i a
L i s t a de d e p e n d e n c i a s
L i s t a de d e p e n d e n c i a s mais r e c e n t e
Nome do a q r u i v o , sem s u f i x o

Existem as chamadas regras de interferencia, que so regras


genericas do make

Projeto Latex
Projeto
Allegro

.c.o : # Este comando diz para o make que o arquivo .o


vai ser gerado apartir do arquivo .c

%.o: %c # Com este comando, a linha que contem o


objetivo : dependencia pode ser modicada para esta
regra.

Referencias

MakeFiles

13 de setembro de 2013

slide 17

Regra .PHONY
Makefile
Mo na
massa...
Explicao
Sintaxe
Chamando
uma regra
Criando
variaveis
Variaveis
automaticas
Variaveis
internas
Regra
.PHONY
Re-escrevendo
o Makefile 1
Re-escrevendo
o Makefile 2

.PHONY, com esta regra, temos a possiblidade de evitar


conitos. Ela utilizada para tratar regras que no utilizem
nenhuma dependencia, um exemplo disto a regra clean.
A sintaxe da regra .PHONY :
.PHONY: <r e g r a 1 > [< r e g r a s . . . > ]
Com esta regra, caso tivermos um arquivo chamado clean na
pasta, e executarmos o comando make clean, o make vai
realizar a operao clean denida no make, e no, tentar
compilar o arquivo clean.

Projeto Latex
Projeto
Allegro
Referencias

MakeFiles

13 de setembro de 2013

slide 18

Re-escrevendo o Makefile 1
Makefile
Mo na
massa...
Explicao
Sintaxe
Chamando
uma regra
Criando
variaveis
Variaveis
automaticas
Variaveis
internas
Regra
.PHONY
Re-escrevendo
o Makefile 1
Re-escrevendo
o Makefile 2

Agora que j temos conhecimentos sobre as principais regras


do Makele, podemos pegar o makele escrito para exemplo.
Ento, vamos denir as variaveis do nosso makele
CC=g c c
CFLAGS=W Wall
EXEC=exemplo
SRC= $ ( w i l d c a r d . c )
OBJ= $ (SRC : . c =.o )
O comando wildcard permite a utilizao de caracteres joker
na denio de variaveis.

Projeto Latex
Projeto
Allegro
Referencias

MakeFiles

13 de setembro de 2013

slide 19

Re-escrevendo o Makefile 2
Makefile
Mo na
massa...
Explicao
Sintaxe
Chamando
uma regra
Criando
variaveis
Variaveis
automaticas
Variaveis
internas
Regra
.PHONY
Re-escrevendo
o Makefile 1
Re-escrevendo
o Makefile 2

exemplo : $ (OBJ)
# $@ = exemplo :
# $^ = o p e r a c o e s . o main . o
$ (CC) o $@ $^
# main . o : main . c
%.o : %. c
$ (CC) o $@ c $< $ (CFLAGS)
.PHONY: c l e a n

Projeto Latex
Projeto
Allegro
Referencias

clean :
rm r f . o
Com este cdigo, temos um makele capaz de compilar todos
os arquivos .c que esto no diretorio.
MakeFiles

13 de setembro de 2013

slide 20

Makefile
Mo na
massa...
Explicao
Projeto Latex
Makefile para
latex
O makefile

Projeto Latex

Projeto
Allegro
Referencias

MakeFiles

13 de setembro de 2013

slide 21

Makefile para latex


Makefile
Mo na
massa...
Explicao
Projeto Latex
Makefile para
latex
O makefile
Projeto
Allegro
Referencias

Com o makele somos capazes de compilar, processar,


qualquer tipo de linha de comando de uma forma mais simples
e ecaz. Como os arquivos latex so compilados pelo latex
ento somos capaz de compilar cdigos latex com o makele
tambm.
Detalhes sobre o processador LATEX
O processador do LATEXconverte o cdigo LATEXpara DVI

A converso do cdigo DVI para PDF realizada nas


seguintes etapas:

DVI => PS

PS => PDF

MakeFiles

13 de setembro de 2013

slide 22

O makefile
Makefile
Mo na
massa...
Explicao
Projeto Latex
Makefile para
latex
O makefile
Projeto
Allegro

_LATEX = l a t e x
_DVI2PS = d v i p s
_PS2PDF = ps 2 pdf
_DVN = exemploLatex
_PSN = $ (_DVN) . ps
PDF_NAME = l a t e x M a k e f i l e . pdf

Referencias

a l l : $ (PDF_NAME) c l e a n
$ (PDF_NAME) : l t x . t e x
$ (_LATEX) jobname=$ (_DVN) $<
$ (_DVI2PS) $ (_DVN) . d v i o $ (_PSN)
$ (_PS2PDF) $ (_PSN)
clean :
rm r f . aux . d v i . l o g . ps
MakeFiles

13 de setembro de 2013

slide 23

Makefile
Mo na
massa...
Explicao
Projeto Latex
Projeto
Allegro

Projeto Allegro

Projeto
Makefile
Referencias

MakeFiles

13 de setembro de 2013

slide 24

Projeto
Makefile

Para apresentar a utilizao de libs e como ela tratada


no makele, iremos criar um projeto utilizando a livraria
Allegro 5.x.

Para este projeto, foi criado 3 arquivos fonte: main.c,


init.c e comum.h

Mo na
massa...
Explicao
Projeto Latex
Projeto
Allegro
Projeto
Makefile
Referencias

O makele para este projeto, pode ser feito baseado no


makele apresentado no primeiro exemplo de makele. A
diferena que neste makele iremos criar uma variavel
chamada LIBS, que vai representar as libs que vo ser
linkadas juntamente com o projeto.
LIBS=l a l l e g r o _ p r i m i t i v e s

MakeFiles

13 de setembro de 2013

slide 25

Makefile
Makefile
Mo na
massa...
Explicao
Projeto Latex
Projeto
Allegro
Projeto
Makefile

CC=g c c
CFLAGS=W Wall
EXEC=ExemploAllegro
SRC= $ ( w i l d c a r d . c )
OBJ= $ (SRC : . c =.o )
LIBS=l a l l e g r o _ p r i m i t i v e s

Referencias

a l l : $ (EXEC)
$ (EXEC) : $ (OBJ)
$ (CC) o $@ $^
%.o : %. c
$ (CC) o $@ c $< $ (CFLAGS) $ ( LIBS )
...
MakeFiles

13 de setembro de 2013

slide 26

Makefile
Mo na
massa...
Explicao
Projeto Latex
Projeto
Allegro

Referencias

Referencias
Referencias
GNU

MakeFiles

13 de setembro de 2013

slide 27

Referencias GNU
Makefile

1 http://www.gnu.org/software/make/manual/make.pdf

Mo na
massa...
Explicao
Projeto Latex
Projeto
Allegro
Referencias
Referencias
GNU

MakeFiles

13 de setembro de 2013

slide 28

Você também pode gostar