O que é O makefile é um arquivo para configuração de compilação utilizado pelo programa make, cuja ideia é simplificar e agilizar a compilação de programas.
Vantagens e uso Evita a compilação de arquivos desnecessários. Por exemplo, se o programa utiliza 120 bibliotecas e altera-se apenas uma delas, o makefile descobre (comparando as datas de alteração dos arquivos fontes com as dos arquivos anteriormente compilados) qual arquivo foi alterado e compila apenas a biblioteca necessária. Escrever um arquivo makefile é bastante simples. O arquivo é escrito em formato texto DOS e pode ser escrito usando qualquer editor de texto puro (como o pico, gedit ou Notepad).
Forma de utilização Para utilizar o makefile basta criar o arquivo com o nome makefile no diretório/pasta onde se encontram os arquivos fonte para compilar e executar o programa make no mesmo diretório.
O makefile funciona de acordo com regras A sintaxe de uma regra é: regra: dependências <TAB> comando <TAB> comando <TAB> comando <TAB>
Dependências: Antes de executar os comandos de uma regra, o programa make certifica-se que todas as dependências foram satisfeitas. Uma dependência pode ser outra regra ou então algum arquivo necessário para execução dos comandos. Por exemplo, a regra de compilação de um executável pode ter como dependência as regras que compilam as bibliotecas necessárias e também os arquivos fonte necessários.
Lista de comandos: Após as dependências, temos a lista de comandos. Os comandos são indentados com TAB s e não com espaços! Cada comando pode ser qualquer chamada de um programa de linha de comando; por exemplo, Comandos do Sistema Operativo: rm, copy, mkdir, Chamada ao compilador: gcc, cc,
Regra: A regra pode ter qualquer nome. Por exemplo, o nome da regra que compila o arquivo programa.c pode ser compilar.
Um exemplo simples: compilar: programa.c programa.h gcc -o programa.exe programa.c Nestemakefile temos apenas uma regra de nome compilar que gera o executável do programa ( programa.exe ). O programa make, antes de executar os comandos desta regra, verifica se os arquivos programa.c e programa.h existem. Só então são executados os comandos, no caso a compilação.
No caso da dependência ser outra regra, a regra da dependência é avaliada antes da regra dependente. Por exemplo: executar: compilar.\programa.exe compilar: programa.c programa.h gcc -o programa.exe programa.c A primeira regra a ser avaliada é sempre a primeira do arquivo; neste caso, a regra executar. Porém, durante a avaliação da regra executar, é encontrada a dependência compilar.
executar: compilar.\programa.exe compilar: programa.c programa.h gcc -o programa.exe programa.c Como existe uma regra com o nome compilar no arquivo, o make sabe que se trata de uma outra regra e não de um arquivo. Antes de executar os comandos da regra executar, o make avalia a regra compilar, verifica as dependências e executa os comandos da regra compilar.
executar: compilar.\programa.exe compilar: programa.c programa.h gcc -o programa.exe programa.c Agora a regra compilar está satisfeita e o make pode executar os comandos da regra executar, que neste caso executa o programa compilado (.\programa.exe). O programa só é executado se a compilação ocorrer com sucesso. Caso haja um erro de compilação, a avaliação para e o comando da regra executar não são executados.
Outro caso interessante é quando se chama o make duas vezes consecutivas. Se a primeira chamada à compilação ocorreu sem problemas, Na segunda chamada o programa não é compilado. Ou seja, o make percebe que não é necessário compilar o programa e salta a regra compilar, indo direto para a regra executar.
Um outro exemplo: all: iniciar compilar executar iniciar: @echo Bem vindo ao makefile. Tentar executar o programa. executar:.\programa.exe compilar: programa.c programa.h gcc -o programa.exe programa.c Neste caso, o makefile inicia-se pela primeira regra (all) com três dependências: iniciar, compilar e executar.
all: iniciar compilar executar iniciar: @echo Bem vindo ao makefile. Tentar executar o programa. executar:.\programa.exe compilar: programa.c programa.h gcc -o programa.exe programa.c iniciar: escreve uma mensagem de entrada compilar: compila o programa executar: executa o programa (se a compilação tiver sucesso)
Um outro exemplo: all: compilar executar limpar executar:.\programa.exe compilar: programa.c programa.h gcc -o programa.exe programa.c limpar: rm programa.exe Neste caso, o makefile depois de compilar e executar, remove o ficheiro executável (programa.exe).
Não se tem que começar sempre pela primeira regra que aparece. Pode-se informar o make para executar apenas uma das regras. Para isso passa-se como parâmetro na linha de comando o nome da regra que queremos executar. Por exemplo: make limpar