Makefile

462 visualizações

Publicada em

0 comentários
0 gostaram
Estatísticas
Notas
  • Seja o primeiro a comentar

  • Seja a primeira pessoa a gostar disto

Sem downloads
Visualizações
Visualizações totais
462
No SlideShare
0
A partir de incorporações
0
Número de incorporações
7
Ações
Compartilhamentos
0
Downloads
14
Comentários
0
Gostaram
0
Incorporações 0
Nenhuma incorporação

Nenhuma nota no slide

Makefile

  1. 1. MakeFiles Alexandre Savelli Bencz 13 de setembro de 2013
  2. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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) . . .
  33. 33. Referencias Makefile Mão na massa... Explicação Projeto Latex Projeto Allegro Referencias Referencias GNU MakeFiles 13 de setembro de 2013 slide 27
  34. 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

×