Como utilizar o Makefile
Tags: programming, productivity, tutorial, beginners
Published: 2021-12-19 13:09:58

Se você nunca utilizou Makefile, este artigo vai te ajudar a ter uma noção básica de como criar suas primeiras tarefas e como utilizar.

### O que é o makefile?

O Makefile é um arquivo que pode conter varias tarefas (comandos/atalhos) e para executar essas tarefas é utilizado a ferramenta **make** do GNU.

O **make** é uma ferramenta responsável por controlar a geração de executáveis.

Eu vou demonstrar alguns exemplos de uso, mas primeiro é necessário que seja criado um arquivo com o nome **Makefile**

Depois de criado o arquivo você pode copiar e colar esse trecho abaixo

```sh
olar:
   @echo "Olar Gustavo"
```

Essa tarefa que se chama **olar** vai ser responsável por imprimir **Olar Gustavo**

Para executar a tarefa, certifique-se que esteja na pasta que foi criado o arquivo **Makefile** e depois execute no terminal de preferência o comando: **make olar**

O resultado é: 

```sh
Olar Gustavo
```

Uma observação o **@** é para esconder o comando de saida, caso não coloque o resultado seria assim:

```sh
echo "Olar Gustavo"
Olar Gustavo
```


Você pode também passar parâmetros

```sh
olar:
   @echo "Olar $(name)"
```

Para executar o comando: **make olar name="Gustavo Aguiar"**

Você pode também executar várias tarefas ao mesmo tempo

```sh
test:
   @go mod vendor
   @go test ./...
```

Você pode criar comandos para construir sua aplicação e rodar projetos

```sh
start: build run ## Inicia a criação da aplicação
build: 
    @echo "Building app..."
    @docker build . -t app
run:
   @echo "Running app..."
   @docker run --rm -it app
```

#### Detalhes a mais

Agora vamos criar um comando chamado **help**

```sh
help:
	@grep -E '^[0-9a-zA-Z_-]+:.*?## .*$$' $(MAKEFILE_LIST) | grep ^help -v | sort | awk 'BEGIN {FS = ":.*?## "}; {printf "\033[36m%-22s\033[0m %s\n", $$1, $$2}'
```

Esse comando tem como objetivo imprimir todos os atalhos que estão criados dentro do **Makefile**, mas para imprimir deve colocar um comentário na frente do comando, por exemplo:

```sh
olar: ## Comando responsável por imprimir o nome, Olar {valor}
        @echo "Olar $(name)"
```

No começo do arquivo, coloque o comando `.PHONY`, ele será 
responsável por indicar para o **Makefile** que o comando help não é um arquivo, porque por padrão o make vai tentar executar o help como se fosse um arquivo.

```sh
.PHONY: help
```

Comando para imprimir o nome do projeto

```sh
define TITLE_ART

  ____  _               _____           _                   
 / __ \| |             / ____|         | |                  
| |  | | | __ _ _ __  | |  __ _   _ ___| |_ __ ___   _____  
| |  | | |/ _` | '__| | | |_ | | | / __| __/ _` \ \ / / _ \ 
| |__| | | (_| | |    | |__| | |_| \__ \ || (_| |\ V / (_) |
 \____/|_|\__,_|_|     \_____|\__,_|___/\__\__,_| \_/ \___/ 

endef
export TITLE_ART

welcome:
	@echo "$$TITLE_ART"
```

Gerador de títulos:

https://www.kammerl.de/ascii/AsciiSignature.php


### Conclusão

Eu demonstrei exemplos simples, mas que podem facilitar o dia a dia de qualquer desenvolvedor, como evitar ficar escrevendo comandos extensos e até mesmo utilizar como uma documentação de instruções de como rodar o projeto.

Espero que essa leitura tenha sido útil!

###### Documentação do Make:

https://www.gnu.org/software/make/
https://www.gnu.org/software/make/manual/make.html