Como Criar um Makefile

Na unha e de forma r√°pida ūüďĀ.


Como Criar um Makefile

No artigo que nós criamos: Tutorial Definitivo do GNU Autotools para Iniciantes , mostramos todo o passo à passo com exemplo para você gerar um configure de forma padronizada . E esse arquivo(configure) após executado irá gerar um Makefile para consequentemente construir um projeto e ser devidamente instalado/desinstalado no sistema, bem como seus exemplos, documentação e manual.

No entanto, se você acha que todo aquele procedimento não é necessário para seu projeto(que pode ser mais simples) , você pode criar diretamente um Makefile na unha de forma rápida e chegará ao mesmo resultado.


Introdução

Um makefile √© um arquivo (por padr√£o chamado de ‚ÄúMakefile‚ÄĚ) contendo um conjunto de diretivas usadas pela ferramenta de automa√ß√£o de compila√ß√£o make para gerar um alvo/meta(instalar, desinstalar, remover alguns arquivos e outros).

Um makefile cont√©m essencialmente atribui√ß√Ķes de vari√°veis, coment√°rios e regras (‚Äútargets‚ÄĚ). Coment√°rios s√£o iniciados com o car√°cter ‚Äú#‚ÄĚ.


Exemplo B√°sico

Você pode usar um editor de texto para escrever seu Makefile, no entanto, é necessário ficar atento aos detalhes, pois o Makefile gera erro até com espaços onde deveria ser TAB. Vejamos algumas linhas:

TARGET=nomedoprograma
CXX=c++
LD=c++
OBJS=main.cpp
nomedoprograma:$(OBJS)
	$(LD) -o $(TARGET) $(OBJS)
install:
	@install nomedoprograma /usr/local/bin/nomedoprograma
clean:
	rm -rf *.o

De início para meio estranho, mas esse Makefile se resume em: c++ main.cpp -o nomedoprograma. Os parametros install e clean são opcionais para a construção do programa.


Um exemplo um pouco menos b√°sico

Você pode criar diversas variáveis para o produto final. Nesse exemplo abaixo, digamos que você quer os parametros:

Logo, além das variáveis básicas que vimos no exemplo básico, o final ficaria assim:

Perceba que dessa vez os OBJS informa os binários, e se você usar só o comando make, não vai funcionar, pois o ALVO mínimo para construção do programa é o parametro all. Os arquivos códigos estão dentro de um diretório: src/

TARGET=hello-world
CC=g++
DEBUG=-g
OPT=-O0
WARN=-Wall
PTHREAD=-pthread
CCFLAGS=$(DEBUG) $(OPT) $(WARN) $(PTHREAD) -pipe
LD=g++
LDFLAGS=$(PTHREAD) -export-dynamic
OBJS= main.o helloworld.o
all: $(OBJS)
	$(LD) -o $(TARGET) $(OBJS) $(LDFLAGS)
 
main.o: src/main.cpp
	$(CC) -c $(CCFLAGS) src/main.cpp -o main.o
 
helloworld.o: src/helloworld.cpp
	$(CC) -c $(CCFLAGS) src/helloworld.cpp  -o helloworld.o
 
clean:
	rm -f *.o

Resumindo

Eu crio e uso Makefiles diariamente, criei até um comando em Shell, faça também, que gera um pra mim passando somente os arquivos como parametro . A verdade é que não há segredos, basta respeitar essas regras básicas. Os nomes de variáveis você pode até decidir e lembre-se de usar TAB abaixo dos ALVOS onde ficarão os comandos.

Se ainda não pegou, sugiro você dá uma olhada nos exemplos simples sugerido pelos caras do GNU, foi lá que eu aprendi: https://www.gnu.org/software/make/manual/html_node/Simple-Makefile.html . Os arquivos do exemplo aqui citados podem ser conseguidos no tutorial que eu fiz pra documentação do Gentoo nesse link: https://wiki.gentoo.org/wiki/Basic_guide_to_write_Gentoo_Ebuilds .

Abraços!

Compartilhe

Marcos Oliveira

Autor
Marcos Oliveira
Desenvolvedor de Software
youtube.com/TerminalRootTV

Pacote Promocional com Todos os Cursos

Adquira todos os cursos para se tornar um ninja do Terminal e do Linux.

Artigos Relacionados



Coment√°rios