Este artigo não cita fontes confiáveis. (Dezembro de 2021) |
No desenvolvimento de software, make é um utilitário que compila automaticamente programas
e bibliotecas do arquivo fonte através da leitura de instruções contidas em arquivos denominados Makefiles, que especificam como obter o programa de destino. O make pode decidir por onde começar através de uma ordenação topológica. Ele também é capaz de resolver automaticamente as dependências do programa que se pretende compilar. Apesar de Ambientes Integrados de Desenvolvimento e funcionalidades de compiladores específicos de linguagem também poderem ser utilizados para gerenciar o processo de compilação nos sistemas modernos, o make continua sendo amplamente usado, principalmente em plataformas do tipo Unix.
O ficheiro "Makefile" é constituido por comandos como os seguintes:
foo.o: foo.c foo.h bar.h gcc -o foo.o foo.c logobig.ppm: logo.pov $(POVRAY) logo.pov -k0 -o logobig.ppm
O primeiro comando ordena a recompilação do ficheiro foo.o se um dos ficheiros foo.c, foo.h ou bar.h for mais recente que foo.o. Diz-se que foo.o depende de foo.c, foo.h ou bar.h.
O segundo comando estabelece uma dependência de logobig.ppm em relação a logo.pov e ordena a compilação do ficheiro logobig.ppm através do programa POV-Ray.
Os ficheiros Makefile são utilizados para compilar programas, mas podem ser utilizados em qualquer situação em que alguns ficheiros são produzidos a partir de outros através de programa que podem ser executados a partir da linha de comandos.
Estrutura do makefile
Um Makefile consiste de linhas de dependência, que definem um destino (uma regra), seguido por dois pontos (:) e opcionalmente um conjunto de arquivos nos quais o destino depende. A linha de dependência é organizada de maneira que o destino (do lado esquerdo do caractere :) depende dos componentes (do lado direito do caractere :).
Após cada linha de dependência, uma série de linhas de texto identado por tabulação pode vir adiante, o que define a maneira de como transformar os componentes (normalmente arquivos fonte) no destino (normalmente a "saída"). Se qualquer um dos componentes for modificado, os comandos abaixo da linha serão executados. A estrutura básica é:
# Comentários são iniciados com o símbolo cerquilha (#).
destino [destino ...]: [componente ...]
[<TAB>comando 1]
.
.
.
[<TAB>comando n]
Um exemplo de um ficheiro (arquivo) makefile
# Especifica o compilador
CC = g++
# Especifica as opções do compilador
CFLAGS = -g
LDFLAGS = -L/usr/openwin/lib
LDLIBS = -lX11 -lXext
# Necessário para reconhecer .cpp como uma extensão de ficheiro (arquivo)
.SUFFIXES: $(SUFFIXES) .cpp
# Nome do executável
PROG = life
# Lista dos ficheiros (arquivos) objetos necessários para o programa final
OBJS = main.o window.o Board.o Life.o BoundedBoard.o
all: $(PROG)
# Compilação do programa e passos das ligações de dependências
$(PROG): $(OBJS)
$(CC) $(CFLAGS) $(LDFLAGS) $(LDLIBS) -o $(PROG) $(OBJS)
.cpp.o:
$(CC) $(CFLAGS) -c $*.cpp
Como obter o Make
Os utilizadores do GNU/Linux devem recorrer ao endereço seguinte: http://www.gnu.org/directory/.
Alternativas
- O makepp deriva de (GNU) make, mas tem adicionalmente um analisador extensível de comandos e ficheiros incluídos a fim de reconhecer automaticamente as dependências implícitas. As opções do comando mudadas e outras influências são reconhecidas. O grande problema de make recursif pode ser contornado facilmente, para garantir uma construção correcta. Além disso o Perl está disponível em todos os níveis. http://makepp.sf.net