2. Makefile
Makefile
O que é um
Makefile ?
Vantagens
Mão na
massa...
Explicação
Projeto Latex
Projeto
Allegro
Referencias
MakeFiles 13 de setembro de 2013 slide 2
3. O que é um Makefile ?
Makefile
O que é um
Makefile ?
Vantagens
Mão na
massa...
Explicação
Projeto Latex
Projeto
Allegro
Referencias
MakeFiles 13 de setembro de 2013 slide 3
■ Makefile é um arquivo que contem uma série de intruções
de compilação
4. O que é um Makefile ?
Makefile
O que é um
Makefile ?
Vantagens
Mão na
massa...
Explicação
Projeto Latex
Projeto
Allegro
Referencias
MakeFiles 13 de setembro de 2013 slide 3
■ Makefile é um arquivo que contem uma série de intruções
de compilação
■ O arquivo Makefile é processado por um programa
denominado make
5. O que é um Makefile ?
Makefile
O que é um
Makefile ?
Vantagens
Mão na
massa...
Explicação
Projeto Latex
Projeto
Allegro
Referencias
MakeFiles 13 de setembro de 2013 slide 3
■ Makefile é um arquivo que contem uma série de intruções
de compilação
■ O arquivo Makefile é processado por um programa
denominado make
■ As linhas de comando existentes no arquivo Makefile,
podem realizar varias tarefas, tais como:
◆ Criação de diretorios
6. O que é um Makefile ?
Makefile
O que é um
Makefile ?
Vantagens
Mão na
massa...
Explicação
Projeto Latex
Projeto
Allegro
Referencias
MakeFiles 13 de setembro de 2013 slide 3
■ Makefile é um arquivo que contem uma série de intruções
de compilação
■ O arquivo Makefile é processado por um programa
denominado make
■ As linhas de comando existentes no arquivo Makefile,
podem realizar varias tarefas, tais como:
◆ Criação de diretorios
◆ Limpeza de arquivos temporarios
7. O que é um Makefile ?
Makefile
O que é um
Makefile ?
Vantagens
Mão na
massa...
Explicação
Projeto Latex
Projeto
Allegro
Referencias
MakeFiles 13 de setembro de 2013 slide 3
■ Makefile é um arquivo que contem uma série de intruções
de compilação
■ O arquivo Makefile é processado por um programa
denominado make
■ As linhas de comando existentes no arquivo Makefile,
podem realizar varias tarefas, tais como:
◆ Criação de diretorios
◆ Limpeza de arquivos temporarios
◆ Execução de comandos
8. Vantagens
Makefile
O que é um
Makefile ?
Vantagens
Mão na
massa...
Explicação
Projeto Latex
Projeto
Allegro
Referencias
MakeFiles 13 de setembro de 2013 slide 4
■ A linguagem Make, é uma linguagem script comum.
◆ Mas a linguagem make é muito mais utilizada para o
tratamento de compilação de projetos.
■ Evita a compilação inteira de grandes projetos.
■ Facilita tarefas rotineiras.
Pequeno exemplo de um script em Make:
a=10
b=10
soma=$ (( $a + $b ))
echo ${soma}
9. Mão na massa...
Makefile
Mão na
massa...
A primeira
vez...
main.c
operacoes.c
comum.h
operacoes.h
Makefile
Explicação
Projeto Latex
Projeto
Allegro
Referencias
MakeFiles 13 de setembro de 2013 slide 5
10. A primeira vez...
Makefile
Mão na
massa...
A primeira
vez...
main.c
operacoes.c
comum.h
operacoes.h
Makefile
Explicação
Projeto Latex
Projeto
Allegro
Referencias
MakeFiles 13 de setembro de 2013 slide 6
■ Para iniciarmos com a construção 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
15. Makefile
Makefile
Mão na
massa...
A primeira
vez...
main.c
operacoes.c
comum.h
operacoes.h
Makefile
Explicação
Projeto Latex
Projeto
Allegro
Referencias
MakeFiles 13 de setembro de 2013 slide 11
a l l : exemplo
exemplo : operacoes . o main . o
gcc −o exemplo . exe main . o operacoes . o
operacoes . o : operacoes . c
gcc −o operacoes . o −c operacoes . c −W −Wall
main . o : main . c
gcc −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
17. Sintaxe
Makefile
Mão na
massa...
Explicação
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
MakeFiles 13 de setembro de 2013 slide 13
Sintaxe da linguagem make:
objetivo : ␣[<dep1>␣ [ <... >]]
<tab>comando
<tab>comando
<tab > . . .
A regra, ou também chamado de objetivo, "all", é a primeira
regra a ser processada pelo make, quando o arquivo Makefile é
aberto pelo make, e suas dependencias são processadas na
ordem colocada pelo programador.
a l l : criaDir msgOi
msgOi :
@echo Oi : )
criaDir :
@mkdir exemplo
18. Chamando uma regra
Makefile
Mão na
massa...
Explicação
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
MakeFiles 13 de setembro de 2013 slide 14
As regras criadas no arquivo makefile 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 clean
make i n s t a l l
make MkDirObj
make informacoes
. . .
executando o make, utilizando como parametro alguma regra
citada dentro do makefile que o make vai executar, apenas a
regra é executada, considerando também, suas devidas
dependencias.
19. Criando variaveis
Makefile
Mão na
massa...
Explicação
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
MakeFiles 13 de setembro de 2013 slide 15
■ Sintaxe
◆ <NOME>=<VALOR>
■ Utilização da variavel
◆ $(<NOME>)
Exemplo:
CC=gcc
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)
. . .
20. Variaveis ’automaticas’
Makefile
Mão na
massa...
Explicação
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
MakeFiles 13 de setembro de 2013 slide 16
■ Com a definição de uma variavel chamada SRC, podemos
dizer para o make, quais são os arquivos fonte que iremos
compilar, e juntamente com a definição desta variavel,
precisamos dizer para o make, quais são os arquivos
objetos.
◆ SRC = main.c operacao.c
OBJ = main.o operacao.o
21. Variaveis ’automaticas’
Makefile
Mão na
massa...
Explicação
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
MakeFiles 13 de setembro de 2013 slide 16
■ Com a definição de uma variavel chamada SRC, podemos
dizer para o make, quais são os arquivos fonte que iremos
compilar, e juntamente com a definição desta variavel,
precisamos dizer para o make, quais são os arquivos
objetos.
◆ SRC = main.c operacao.c
OBJ = main.o operacao.o
■ Existe uma forma para simplificar este sistema onde não
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 extenção
diferente.
◆ SRC = main.c operacao.c
OBJ = $(SRC:.c=.o)
22. Variaveis ’automaticas’
Makefile
Mão na
massa...
Explicação
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
MakeFiles 13 de setembro de 2013 slide 16
■ Com a definição de uma variavel chamada SRC, podemos
dizer para o make, quais são os arquivos fonte que iremos
compilar, e juntamente com a definição desta variavel,
precisamos dizer para o make, quais são os arquivos
objetos.
◆ SRC = main.c operacao.c
OBJ = main.o operacao.o
■ Existe uma forma para simplificar este sistema onde não
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 extenção
diferente.
◆ SRC = main.c operacao.c
OBJ = $(SRC:.c=.o)
23. Variaveis internas
Makefile
Mão na
massa...
Explicação
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
MakeFiles 13 de setembro de 2013 slide 17
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 regra
$< # Nome da primeira dependencia
$^ # Lista de dependencias
$? # Lista de dependencias mais recente
$∗ # Nome do aqruivo , sem s u f i x o
Existem as chamadas regras de interferencia, que são regras
genericas do make
■ .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 modificada para esta
regra.
24. Regra .PHONY
Makefile
Mão na
massa...
Explicação
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
MakeFiles 13 de setembro de 2013 slide 18
.PHONY, com esta regra, temos a possiblidade de evitar
conflitos. Ela é utilizada para tratar regras que não utilizem
nenhuma dependencia, um exemplo disto é a regra clean.
A sintaxe da regra .PHONY é:
.PHONY: <regra1> [< regras . . . > ]
Com esta regra, caso tivermos um arquivo chamado clean na
pasta, e executarmos o comando make clean, o make vai
realizar a operação clean definida no make, e não, tentar
compilar o arquivo clean.
25. Re-escrevendo o Makefile 1
Makefile
Mão na
massa...
Explicação
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
MakeFiles 13 de setembro de 2013 slide 19
Agora que já temos conhecimentos sobre as principais regras
do Makefile, podemos pegar o makefile escrito para exemplo.
Então, vamos definir as variaveis do nosso makefile
CC=gcc
CFLAGS=−W −Wall
EXEC=exemplo
SRC= $ ( wildcard ∗. c )
OBJ= $ (SRC : . c=.o )
O comando wildcard permite a utilização de caracteres joker
na definição de variaveis.
26. Re-escrevendo o Makefile 2
Makefile
Mão na
massa...
Explicação
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
MakeFiles 13 de setembro de 2013 slide 20
exemplo : $ (OBJ)
# $@ = exemplo :
# $^ = operacoes . o main . o
$ (CC) −o $@ $^
# main . o : main . c
%.o : %.c
$ (CC) −o $@ −c $< $ (CFLAGS)
.PHONY: clean
clean :
rm −r f ∗. o
Com este código, temos um makefile capaz de compilar todos
os arquivos .c que estão no diretorio.
28. Makefile para latex
Makefile
Mão na
massa...
Explicação
Projeto Latex
Makefile para
latex
O makefile
Projeto
Allegro
Referencias
MakeFiles 13 de setembro de 2013 slide 22
Com o makefile somos capazes de compilar, processar,
qualquer tipo de linha de comando de uma forma mais simples
e eficaz. Como os arquivos latex são compilados pelo latex
então somos capaz de compilar códigos latex com o makefile
também.
Detalhes sobre o processador LATEX
■ O processador do LATEXconverte o código LATEXpara DVI
■ A conversão do código DVI para PDF é realizada nas
seguintes etapas:
◆ DVI => PS
◆ PS => PDF
29. O makefile
Makefile
Mão na
massa...
Explicação
Projeto Latex
Makefile para
latex
O makefile
Projeto
Allegro
Referencias
MakeFiles 13 de setembro de 2013 slide 23
_LATEX = latex
_DVI2PS = dvips
_PS2PDF = ps2pdf
_DVN = exemploLatex
_PSN = $ (_DVN) . ps
PDF_NAME = latexMakefile . pdf
a l l : $ (PDF_NAME) clean
$ (PDF_NAME) : lt x . tex
$ (_LATEX) −−job−name=$ (_DVN) $<
$ (_DVI2PS) $ (_DVN) . dvi −o $(_PSN)
$ (_PS2PDF) $ (_PSN)
clean :
rm −r f ∗. aux ∗. dvi ∗. log ∗. ps
31. Projeto
Makefile
Mão na
massa...
Explicação
Projeto Latex
Projeto
Allegro
Projeto
Makefile
Referencias
MakeFiles 13 de setembro de 2013 slide 25
■ Para apresentar a utilização de libs e como ela é tratada
no makefile, 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
O makefile para este projeto, pode ser feito baseado no
makefile apresentado no primeiro exemplo de makefile. A
diferença é que neste makefile iremos criar uma variavel
chamada LIBS, que vai representar as libs que vão ser
linkadas juntamente com o projeto.
LIBS=−la lle g r o _pr im it iv e s