Problema:
Seu problema é que make
não sabe sobre seus alvos.
Você pode executar o Makefile acima com make stackoverflow.markdown
, por exemplo, e ele funcionará.
make
apenas, no entanto, falhará, desde que você tenha especificado apenas como criar seus destinos, mas não quais.
Como a saída do ponto de vista , a regra padrão acima é chamada de regra implícita .
Makefile:
SRC = $(wildcard *.html)
TAR = $(SRC:.html=.markdown)
.PHONY: all clean
all: $(TAR)
%.markdown: %.html
pandoc -o $< $@
clean:
rm -f $(TAR)
Explicação:
SRC
get são todos os arquivos de origem (aqueles que terminam em .html
) por meio do wildcard
do Makefile.
TAR substitui cada arquivo de origem listado em SRC
com um destino que termina com .markdown
em vez de .html
.
.PHONY lista alvos não físicos que estão sempre desatualizados e, portanto, são sempre executados - eles são geralmente all
e clean
.
O destino all
tem como dependência (arquivos listados no lado direito do :
) todos% arquivos*.markdown
. Isso significa que todos esses alvos são executados.
%.markdown: %.html
pandoc -o $< $@
Este trecho diz: Cada destino que termina com .markdown
depende de um arquivo com o mesmo nome, exceto que a dependência está terminando com .html
. O curinga %
deve ser visto como *
como no shell. O %
no lado direito, no entanto, é comparado com a correspondência no lado esquerdo. Fonte .
Note que a sequência de espaços em branco na frente de pandoc
é uma TAB , pois make
define isso como um padrão.
Por fim, o alvo phony clean
descreve como limpar seu sistema dos arquivos que você criou com este Makefile. Nesse caso, está excluindo todos os destinos (os arquivos que receberam o nome *.markdown
.