Makefile 无法做到干净,尽管。虚假

Makefile 无法做到干净,尽管。虚假,makefile,gnu-make,target,Makefile,Gnu Make,Target,我创建了一个Makefile,用于将markdown转换为其他格式。我用过.PHONY:clean,但我仍然不能做makeclean。它搜索clean.md文件。我知道这是因为$(MAKECMDGOALS),但我只需要它转换一个文件 SOURCE= $(wildcard *.md) ## Pattern Substitution HTML=$(SOURCE:.md=.gen.html) PDF=$(SOURCE:.md=.gen.pdf) ## Targets and dependenci

我创建了一个Makefile,用于将markdown转换为其他格式。我用过
.PHONY:clean
,但我仍然不能做
makeclean
。它搜索
clean.md
文件。我知道这是因为
$(MAKECMDGOALS)
,但我只需要它转换一个文件

SOURCE= $(wildcard *.md)
## Pattern Substitution
HTML=$(SOURCE:.md=.gen.html) 
PDF=$(SOURCE:.md=.gen.pdf) 

## Targets and dependencies
.PHONY: all
all : $(HTML) $(PDF)

html:   clean $(HTML)
pdf:    clean $(PDF)

.PHONY: clean
clean:
    - $(RM) -f *.gen.*

.PHONY: $(MAKECMDGOALS)
$(MAKECMDGOALS): $(MAKECMDGOALS:%=%.html) $(MAKECMDGOALS:%=%.gen.pdf)

%.gen.html : %.md
    $(PANDOC) $(PANDOC_OPTIONS) $(PANDOC_HTML_OPTIONS) -o $@ $<

%.gen.pdf : %.md
    $(PANDOC) $(PANDOC_OPTIONS) $(PANDOC_PDF_OPTIONS) -o $@ $<
SOURCE=$(通配符*.md)
##模式替换
HTML=$(来源:.md=.gen.HTML)
PDF=$(来源:.md=.gen.PDF)
##目标和依赖项
冒牌货:全部
全部:$(HTML)$(PDF)
html:clean$(html)
pdf:clean$(pdf)
.假冒:干净
清洁:
-$(RM)-f*.gen*
.PHONY:$(MAKECMDGOALS)
$(MAKECMDGOALS):$(MAKECMDGOALS:%=%.html)$(MAKECMDGOALS:%=%.gen.pdf)
%.gen.html:%.md
$(PANDOC)$(PANDOC_选项)$(PANDOC_HTML_选项)-o$@$<
%.gen.pdf:%.md
$(PANDOC)$(PANDOC_选项)$(PANDOC_PDF_选项)-o$@$<

请建议更改。

规则的目的是什么?$(MAKECMDGOALS)规则的目的是什么?我可以再问你一个问题吗:(目标:%=%.html)是否与(目标:=.html)相同?我们是否也必须过滤掉所有?如果是,这是确定的:目标:=$(过滤掉干净,全部,$(MAKECMDGOALS))是的,所有的都应该过滤掉,我可以再问你一个问题吗:(目标:%=%.html)和(目标:=.html)一样吗?我们也必须过滤掉所有的吗?如果是,这是确定的:目标:=$(过滤掉干净的,全部,$(MAKECMDGOALS))是的,所有也应该过滤掉
GOALS := $(filter-out clean, $(MAKECMDGOALS))

.PHONY: $(GOALS)
$(GOALS): $(GOALS:%=%.html) $(GOALS:%=%.gen.pdf)