A apresentação está carregando. Por favor, espere

A apresentação está carregando. Por favor, espere

Compilação de programas com make Prof. André Leon S. Gradvohl, Dr.

Apresentações semelhantes


Apresentação em tema: "Compilação de programas com make Prof. André Leon S. Gradvohl, Dr."— Transcrição da apresentação:

1 Compilação de programas com make Prof. André Leon S. Gradvohl, Dr.

2 Plano de apresentação O que é o make? Vantagens Estrutura de um makefile Dependências e regras Makefile avançado 2

3 O que é o make? Make é um utilitário para facilitar a manutenção de programas. A proposta do make é determinar automaticamente (baseado na data dos arquivos) que pedaços de um programa precisam ser recompilados; em seguida executar comandos para compilá-los e montá-los novamente em um único programa. Na verdade, o make pode ser usado para qualquer tarefa que envolva atualização de arquivos. Para usar o make, é preciso editar um arquivo texto (puro), geralmente chamado makefile, com as regras de compilação. 3

4 Vantagens do make As vantagens do make são: 1. Organizar do processo de compilação dos arquivos 2. Evitar a compilação desnecessária de arquivos que não foram modificados. 3. Facilitar a manutenção dos arquivos necessários para a criação do programa. 4. Otimizar o processo de compilação dos programas. 4

5 Estrutura de um makefile O makefile consiste de linhas de dependência que definem um target (regra), seguida por dois pontos e, opcionalmente, um conjunto de arquivos ou outras regras dos quais a regra inicial depende. Após cada linha de dependência, pode existir uma série de comandos que definem como transformar os arquivos na regra. 5

6 Estrutura de um makefile Exemplo: CC=gcc programa: arq1.o arq2.o $(CC) arq1.o arq2.o –o programa arq1.o: arq1.c $(CC) –c arq1.c –o arq1.o arq2.o: arq2.c $(CC) –c arq2.c –o arq2.o Para obter a regra programa, é preciso executar antes as regras arq1.o e arq2.o Para executar a regra arq1.o, é preciso que o arquivo arq1.c. Se existir, arq1.c será compilado e gerará o arquivo arq1.o. Para executar a regra arq2.o, é preciso que o arquivo arq2.c. Se existir, arq2.c será compilado e gerará o arquivo arq2.o. 6

7 Estrutura de um makefile Exemplo: CC=gcc programa: arq1.o arq2.o $(CC) arq1.o arq2.o –o programa arq1.o: arq1.c $(CC) –c arq1.c –o arq1.o arq2.o: arq2.c $(CC) –c arq2.c –o arq2.o 7 O que acontece se o arquivo arq2.c for modificado? R. Apenas as regras 1 e 3 serão executadas novamente.

8 Exercício makefile Suponha que tenhamos um programa em C dividido da seguinte forma: 1. No arquivo main.c está o programa principal. 2. No arquivo funcoes.h está a definição de todas as funções principais que serão usadas no programa. 3. No arquivo funcoesAux.h está a definição de todas as funções principais que serão usadas no programa. 4. No arquivo funcoes.c estão as funções principais do programa. 5. No arquivo funcoesAux.c estão as funções auxiliares do programa. Observações: I. As funções principais utilizam funções auxiliares. II. A função main, no programa principal, utiliza tanto funções principais quanto funções auxiliares. III. Queremos criar uma regra que apague o programa executável e todos os arquivos objeto (.o) gerados a partir das funções auxiliares. Como seria esse makefile para gerar o programa Prog.exe? 8

9 Exercício makefile: Solução CC=gcc Prog.exe: main.o funcoes.o funcoesAux.o $(CC) main.o funcoes.o funcoesAux.o –o Prog.exe main.o: main.c funcoes.h funcoesAux.h $(CC) –c main.c –o main.o funcoes.o: funcoes.c funcoes.h funcoesAux.h $(CC) -c funcoes.c –o funcoes.o funcoesAux.o: funcoesAux.c funcoesAux.h $(CC) -c funcoesAux.c –o funcoesAux.o clean: rm –f funcoesAux.o funcoesAux.o main.o Prog.exe 9

10 Makefile avançado Como qualquer interpretador de scripts, o make também interpreta variáveis e alguns símbolos reservados. Por exemplo, podemos especificar qual o compilador a ser utilizado, atribuindo o nome do compilador à variável CC, como fizemos nos exemplos anteriores: CC=gcc Podemos também especificar bibliotecas específicas: LIBS=-lpthread 10

11 Makefile avançado Como qualquer interpretador de scripts, o make aceita comentários, interpreta variáveis e alguns símbolos reservados. Por exemplo, podemos especificar qual o compilador a ser utilizado, atribuindo o nome do compilador à variável CC, como fizemos nos exemplos anteriores: CC=gcc Podemos também especificar bibliotecas específicas: LIBS=-lpthreads Veja o exemplo a seguir. 11

12 Makefile avançado #Definicao do compilador CC=gcc #definição da biblioteca LIBS=-lpthread Prog.exe: main.o funcoes.o funcoesAux.o $(CC) main.o funcoes.o funcoesAux.o $(LIBS)–o Prog.exe main.o: main.c funcoes.h funcoesAux.h $(CC) –c main.c –o main.o funcoes.o: funcoes.c funcoes.h funcoesAux.h $(CC) -c funcoes.c –o funcoes.o funcoesAux.o: funcoesAux.c funcoesAux.h $(CC) -c funcoesAux.c –o funcoesAux.o clean: rm –f funcoesAux.o funcoesAux.o main.o Prog.exe 12

13 Makefile avançado Além das variáveis definidas pelo usuário, o makefile possui alguns truques. Por exemplo: FONTES=$(wildcard *.c) O comando lista todos os arquivos que terminam com.c no diretório atual. OBJETOS=$(FONTES:.c=.o) O comando substitui todos os arquivos Fontes que contêm extensão.c por.o. Informe o que acontece no exemplo a seguir: 13

14 Makefile avançado FONTES=$(wildcard *.c) OBJETOS=$(FONTES:.c=.o) lista: listaFontes listaObjetos listaFontes: Os arquivos fonte sao $(FONTES) listaObjetos: Os arquivos objetos sao $(OBJETOS) 14 O que acontece se os arquivos com a extensão.o não existirem? R. O make os cria, pois sabe que os arquivos.c são compilados com o compilador para a linguagem C.

15 Makefile avançado Na seção de regras, um truque interessante pode ser o seguinte: %.o: %.c $(CC) –c $< -o Basicamente, o que a regra diz é que todo arquivo.o depende de um arquivo.c. O comando para gerar o arquivo.o a partir do arquivo.c é a seguinte: Compilador $(CC) –c sem o linker. Deve usar como fonte a dependência $< E gerar como saída a regra Portanto, o comando pode ser substituído por: gcc –c arq1.c –o arq1.o 15

16 Exercício makefile avançado O que faz o arquivo makefile a seguir? CC=gcc LIBS=-lpthread FONTES=$(wildcard *.c) OBJETOS=$(FONTES:.c=.o) Prog.exe: $(OBJETOS) $(CC) $(OBJETOS) $(LIBS) -o %.o: %.c $(CC) -c $< -o clean: rm -f *.o Prog.exe 16 Considera como FONTES todos os arquivos com extensão.c. os arquivos com extensão.o possuem o mesmo nome dos arquivos.c e ficarão na variável OBJETOS. Para gerar o Prog.exe são necessários todos os arquivos objetos. Para cada arquivo.o deve existir um arquivo.c que deve ser compilado de acordo com o comando abaixo.

17 Por fim... Nessa apresentação não foram exploradas todas as possibilidades do make, apenas as mais comuns. O make é muito poderoso e, se bem utilizado, pode diminuir bastante o tempo gasto para compilar um programa. 17


Carregar ppt "Compilação de programas com make Prof. André Leon S. Gradvohl, Dr."

Apresentações semelhantes


Anúncios Google