make – Wikipédia, a enciclopédia livre


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

[editar | editar código-fonte]

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

[editar | editar código-fonte]
# 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

[editar | editar código-fonte]

Os utilizadores do GNU/Linux devem recorrer ao endereço seguinte: http://www.gnu.org/directory/.

  • 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

Ligações externas

[editar | editar código-fonte]