Answers:
您的问题是您make
不了解目标。
make stackoverflow.markdown
例如,您可以运行上面的Makefile,它将起作用。
make
但是,仅会失败,因为您仅指定了创建目标的方式,但没有指定目标。
正如leiaz point所指出的那样,上述模式规则称为隐式规则。
SRC = $(wildcard *.html)
TAR = $(SRC:.html=.markdown)
.PHONY: all clean
all: $(TAR)
%.markdown: %.html
pandoc -o $< $@
clean:
rm -f $(TAR)
SRC
.html
通过Makefile的获取所有源文件(以结尾的文件)wildcard
。
TAR 将列出的每个源文件替换为SRC
以结尾的目标,.markdown
而不是.html
。
.PHONY列出了总是过时并因此始终执行的非物理目标-通常是all
和clean
。
该目标all
具有作为依赖(文件上的右侧列出:
全部)*.markdown
的文件。这意味着所有这些目标均已执行。
%.markdown: %.html
pandoc -o $< $@
该代码段说:每个以结尾的目标.markdown
都依赖于一个具有相同名称的文件,除了该依赖关系以结尾.html
。的通配符%
被看作是一个*
在壳等。在%
右侧,然而,相比于比赛左侧。来源。
请注意,位于前面的空格序列pandoc
为TAB,因为make
将其定义为标准。
最后,phony clean
目标描述了如何清除使用此Makefile创建的文件中的系统。在这种情况下,它将删除所有目标(名为的文件*.markdown
。
makefile
从头开始创建文件还是仅更新现有文件?因为当我删除生成的文件时,它停止工作。我知道这个愚蠢的问题,但这对我来说是纽芬兰^^“
您的Makefile中没有定义目标。你可以在命令行上的目标:make something.markdown
将使用的配方创建something.markdown
从something.html
。
或者,您可以将一个指定默认目标的规则添加到Makefile中。
all: file1.markdown file2.markdown
all: *.markdown
当您仅运行时make
,第一个规则的第一个目标是默认目标。不需要调用它all
。
因此,在上面,目标all
将您要制作的所有文件作为先决条件,因此当您使用时make all
,它将制作所有列出的文件。
pandoc
命令前的制表符吗?众所周知,Make对于制表符而不是空格非常挑剔。