SlideShare ist ein Scribd-Unternehmen logo
1 von 34
Downloaden Sie, um offline zu lesen
MakeFiles
Alexandre Savelli Bencz
13 de setembro de 2013
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
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 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
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
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
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
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}
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
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
main.c
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 7
#include "comum. h"
int main ()
{
p r i n t f ( "SUM␣=>␣%dn" , sum(10 , 1 0 ) ) ;
p r i n t f ( "SUB␣=>␣%d" , sub (10 , 5 ) ) ;
return 0;
}
operacoes.c
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 8
#include "comum. h"
int sum( int a , int b)
{
return a+b ;
}
int sub ( int a , int b)
{
return a−b ;
}
comum.h
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 9
#ifndef _H_COMUM
#define _H_COMUM
#include <stdio . h>
#include " operacoes . h"
#endif
operacoes.h
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 10
#ifndef _H_OPERACOES
#define _H_OPERACOES
int sum( int a , int b ) ;
int sub ( int a , int b ) ;
#endif
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
Explicação
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 12
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
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.
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)
. . .
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
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)
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)
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.
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.
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.
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.
Projeto 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 21
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
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
Projeto Allegro
Makefile
Mão na
massa...
Explicação
Projeto Latex
Projeto
Allegro
Projeto
Makefile
Referencias
MakeFiles 13 de setembro de 2013 slide 24
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
Makefile
Makefile
Mão na
massa...
Explicação
Projeto Latex
Projeto
Allegro
Projeto
Makefile
Referencias
MakeFiles 13 de setembro de 2013 slide 26
CC=gcc
CFLAGS=−W −Wall
EXEC=ExemploAllegro
SRC= $ ( wildcard ∗. c )
OBJ= $ (SRC : . c=.o )
LIBS=−la lle g r o _pr im it iv e s
a l l : $ (EXEC)
$ (EXEC) : $ (OBJ)
$ (CC) −o $@ $^
%.o : %.c
$ (CC) −o $@ −c $< $ (CFLAGS) $ (LIBS)
. . .
Referencias
Makefile
Mão na
massa...
Explicação
Projeto Latex
Projeto
Allegro
Referencias
Referencias
GNU
MakeFiles 13 de setembro de 2013 slide 27
Referencias GNU
Makefile
Mão na
massa...
Explicação
Projeto Latex
Projeto
Allegro
Referencias
Referencias
GNU
MakeFiles 13 de setembro de 2013 slide 28
1 http://www.gnu.org/software/make/manual/make.pdf

Weitere ähnliche Inhalte

Ähnlich wie Makefiles guia

ZF Básico - 4. Controle e Visão
ZF Básico - 4. Controle e VisãoZF Básico - 4. Controle e Visão
ZF Básico - 4. Controle e VisãoMarcos Bezerra
 
Introdução à Programação Web com Angular
Introdução à Programação Web com AngularIntrodução à Programação Web com Angular
Introdução à Programação Web com AngularElmano Cavalcanti
 
Intro padroesprojetoadaptertemplateobserver
Intro padroesprojetoadaptertemplateobserverIntro padroesprojetoadaptertemplateobserver
Intro padroesprojetoadaptertemplateobserverEduardo Jorge
 
Introdução ao desenvolvimento front end usando bootstrap e angular js
Introdução ao desenvolvimento front end usando bootstrap e angular jsIntrodução ao desenvolvimento front end usando bootstrap e angular js
Introdução ao desenvolvimento front end usando bootstrap e angular jsCloves Moreira Junior
 
Dev401 novos recursos do microsoft visual basic 2010
Dev401 novos recursos do microsoft visual basic 2010Dev401 novos recursos do microsoft visual basic 2010
Dev401 novos recursos do microsoft visual basic 2010Alexandre Tarifa
 
Exemplos de Design Patterns em Java
Exemplos de Design Patterns em JavaExemplos de Design Patterns em Java
Exemplos de Design Patterns em Javaalexmacedo
 
Apostila ph pwamp_parte5
Apostila ph pwamp_parte5Apostila ph pwamp_parte5
Apostila ph pwamp_parte5Ilton Barbosa
 
Módulo 5 Arquitetura de Computadores
Módulo 5 Arquitetura de ComputadoresMódulo 5 Arquitetura de Computadores
Módulo 5 Arquitetura de ComputadoresLuis Ferreira
 
Observable Binding Para Atualização na UI Android
Observable Binding Para Atualização na UI AndroidObservable Binding Para Atualização na UI Android
Observable Binding Para Atualização na UI AndroidVinícius Thiengo
 
Treinamento Básico Sobre ASP.NET MVC
Treinamento Básico Sobre ASP.NET MVCTreinamento Básico Sobre ASP.NET MVC
Treinamento Básico Sobre ASP.NET MVCMichael Costa
 
TechEd Brasil 2010 - Dicas, truques do Visual Studio 2010 e novas funcionalid...
TechEd Brasil 2010 - Dicas, truques do Visual Studio 2010 e novas funcionalid...TechEd Brasil 2010 - Dicas, truques do Visual Studio 2010 e novas funcionalid...
TechEd Brasil 2010 - Dicas, truques do Visual Studio 2010 e novas funcionalid...JP Clementi
 
Apostila PhP com Wamp, 4a Parte
Apostila PhP com Wamp, 4a ParteApostila PhP com Wamp, 4a Parte
Apostila PhP com Wamp, 4a ParteIlton Barbosa
 
Introdução a programação para plataforma iOS
Introdução a programação para plataforma iOSIntrodução a programação para plataforma iOS
Introdução a programação para plataforma iOSDevmedia
 

Ähnlich wie Makefiles guia (20)

ZF Básico - 4. Controle e Visão
ZF Básico - 4. Controle e VisãoZF Básico - 4. Controle e Visão
ZF Básico - 4. Controle e Visão
 
Introdução à Programação Web com Angular
Introdução à Programação Web com AngularIntrodução à Programação Web com Angular
Introdução à Programação Web com Angular
 
Intro padroesprojetoadaptertemplateobserver
Intro padroesprojetoadaptertemplateobserverIntro padroesprojetoadaptertemplateobserver
Intro padroesprojetoadaptertemplateobserver
 
Introdução ao desenvolvimento front end usando bootstrap e angular js
Introdução ao desenvolvimento front end usando bootstrap e angular jsIntrodução ao desenvolvimento front end usando bootstrap e angular js
Introdução ao desenvolvimento front end usando bootstrap e angular js
 
Dev401 novos recursos do microsoft visual basic 2010
Dev401 novos recursos do microsoft visual basic 2010Dev401 novos recursos do microsoft visual basic 2010
Dev401 novos recursos do microsoft visual basic 2010
 
Exemplos de Design Patterns em Java
Exemplos de Design Patterns em JavaExemplos de Design Patterns em Java
Exemplos de Design Patterns em Java
 
Apostila ph pwamp_parte5
Apostila ph pwamp_parte5Apostila ph pwamp_parte5
Apostila ph pwamp_parte5
 
EscmaScript
EscmaScriptEscmaScript
EscmaScript
 
Mvc delphi
Mvc delphiMvc delphi
Mvc delphi
 
Ruby & Rails
Ruby & RailsRuby & Rails
Ruby & Rails
 
Módulo 5 Arquitetura de Computadores
Módulo 5 Arquitetura de ComputadoresMódulo 5 Arquitetura de Computadores
Módulo 5 Arquitetura de Computadores
 
Observable Binding Para Atualização na UI Android
Observable Binding Para Atualização na UI AndroidObservable Binding Para Atualização na UI Android
Observable Binding Para Atualização na UI Android
 
Treinamento Básico Sobre ASP.NET MVC
Treinamento Básico Sobre ASP.NET MVCTreinamento Básico Sobre ASP.NET MVC
Treinamento Básico Sobre ASP.NET MVC
 
TechEd Brasil 2010 - Dicas, truques do Visual Studio 2010 e novas funcionalid...
TechEd Brasil 2010 - Dicas, truques do Visual Studio 2010 e novas funcionalid...TechEd Brasil 2010 - Dicas, truques do Visual Studio 2010 e novas funcionalid...
TechEd Brasil 2010 - Dicas, truques do Visual Studio 2010 e novas funcionalid...
 
Apostila PhP com Wamp, 4a Parte
Apostila PhP com Wamp, 4a ParteApostila PhP com Wamp, 4a Parte
Apostila PhP com Wamp, 4a Parte
 
Basico dovba excel_tutorial1
Basico dovba excel_tutorial1Basico dovba excel_tutorial1
Basico dovba excel_tutorial1
 
Palestra
PalestraPalestra
Palestra
 
Rails na prática
Rails na práticaRails na prática
Rails na prática
 
Shell script
Shell script Shell script
Shell script
 
Introdução a programação para plataforma iOS
Introdução a programação para plataforma iOSIntrodução a programação para plataforma iOS
Introdução a programação para plataforma iOS
 

Makefiles guia

  • 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
  • 11. main.c 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 7 #include "comum. h" int main () { p r i n t f ( "SUM␣=>␣%dn" , sum(10 , 1 0 ) ) ; p r i n t f ( "SUB␣=>␣%d" , sub (10 , 5 ) ) ; return 0; }
  • 12. operacoes.c 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 8 #include "comum. h" int sum( int a , int b) { return a+b ; } int sub ( int a , int b) { return a−b ; }
  • 13. comum.h 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 9 #ifndef _H_COMUM #define _H_COMUM #include <stdio . h> #include " operacoes . h" #endif
  • 14. operacoes.h 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 10 #ifndef _H_OPERACOES #define _H_OPERACOES int sum( int a , int b ) ; int sub ( int a , int b ) ; #endif
  • 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
  • 16. Explicação 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 12
  • 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.
  • 27. Projeto 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 21
  • 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
  • 30. Projeto Allegro Makefile Mão na massa... Explicação Projeto Latex Projeto Allegro Projeto Makefile Referencias MakeFiles 13 de setembro de 2013 slide 24
  • 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
  • 32. Makefile Makefile Mão na massa... Explicação Projeto Latex Projeto Allegro Projeto Makefile Referencias MakeFiles 13 de setembro de 2013 slide 26 CC=gcc CFLAGS=−W −Wall EXEC=ExemploAllegro SRC= $ ( wildcard ∗. c ) OBJ= $ (SRC : . c=.o ) LIBS=−la lle g r o _pr im it iv e s a l l : $ (EXEC) $ (EXEC) : $ (OBJ) $ (CC) −o $@ $^ %.o : %.c $ (CC) −o $@ −c $< $ (CFLAGS) $ (LIBS) . . .
  • 34. Referencias GNU Makefile Mão na massa... Explicação Projeto Latex Projeto Allegro Referencias Referencias GNU MakeFiles 13 de setembro de 2013 slide 28 1 http://www.gnu.org/software/make/manual/make.pdf