Makefile Make:规则中的目标名称

Makefile Make:规则中的目标名称,makefile,build,gnu-make,Makefile,Build,Gnu Make,我已经创建了一个Makefile来为调用make likemake a.md时提到的md文件生成pdf和html,并且不应转换目录中的其他md文件 但我是,得到了错误对于a.md没有什么可做的 您能提出修改建议吗?因为a.md已经就位,make确实没有什么可做的了。您可以只使用例如a作为指定的目标(它可以依赖于pdf和html文件作为先决条件)。或者通过变量传递所需的源,并由此确定所需的目标 一种(后一种)选择是: EXPORTED= $(SOURCE:%.md=%.html) $(SOUR

我已经创建了一个
Makefile
来为调用make like
make a.md
时提到的
md
文件生成
pdf
html
,并且不应转换目录中的其他
md
文件

但我是,得到了错误
对于a.md没有什么可做的


您能提出修改建议吗?

因为
a.md
已经就位,
make
确实没有什么可做的了。您可以只使用例如
a
作为指定的目标(它可以依赖于pdf和html文件作为先决条件)。或者通过变量传递所需的源,并由此确定所需的目标


一种(后一种)选择是:

EXPORTED= $(SOURCE:%.md=%.html) $(SOURCE:%.md=%.pdf)

%.html : %.md
        pandoc -o $@ $<

%.pdf : %.md
        pandoc -o $@ $<

all: $(EXPORTED)
允许您调用
生成一个


但我想重申一下。您不能将(现有)源代码用作目标,因为make将(正如它所做的那样)断定它已经完成了该目标的创建


除了(但我个人并不喜欢这样,因为这让我很困惑),如果你坚持,你可以在之前的拍摄上做一些改变。。。但是与
*.md
目标一起工作。。。你们都声明它是假的。也就是说,不是真实的文件,总是要考虑/重新制作:

%.html : %.md
    echo pandoc -o $@ $<

%.pdf : %.md
    echo pandoc -o $@ $<

.PHONY: $(MAKECMDGOALS)
$(MAKECMDGOALS): $(MAKECMDGOALS:%.md=%.html) $(MAKECMDGOALS:%.md=%.pdf)
%.html:%.md
echo pandoc-o$@$<
%.pdf:%.md
echo pandoc-o$@$<
.PHONY:$(MAKECMDGOALS)
$(MAKECMDGOALS):$(MAKECMDGOALS:%.md=%.html)$(MAKECMDGOALS:%.md=%.pdf)

现在您确实可以调用
make a.md
。我还是喜欢上面两个中的一个。

因为
a.md
已经就位,
make
确实没有什么可做的了。您可以只使用例如
a
作为指定的目标(它可以依赖于pdf和html文件作为先决条件)。或者通过变量传递所需的源,并由此确定所需的目标


一种(后一种)选择是:

EXPORTED= $(SOURCE:%.md=%.html) $(SOURCE:%.md=%.pdf)

%.html : %.md
        pandoc -o $@ $<

%.pdf : %.md
        pandoc -o $@ $<

all: $(EXPORTED)
允许您调用
生成一个


但我想重申一下。您不能将(现有)源代码用作目标,因为make将(正如它所做的那样)断定它已经完成了该目标的创建


除了(但我个人并不喜欢这样,因为这让我很困惑),如果你坚持,你可以在之前的拍摄上做一些改变。。。但是与
*.md
目标一起工作。。。你们都声明它是假的。也就是说,不是真实的文件,总是要考虑/重新制作:

%.html : %.md
    echo pandoc -o $@ $<

%.pdf : %.md
    echo pandoc -o $@ $<

.PHONY: $(MAKECMDGOALS)
$(MAKECMDGOALS): $(MAKECMDGOALS:%.md=%.html) $(MAKECMDGOALS:%.md=%.pdf)
%.html:%.md
echo pandoc-o$@$<
%.pdf:%.md
echo pandoc-o$@$<
.PHONY:$(MAKECMDGOALS)
$(MAKECMDGOALS):$(MAKECMDGOALS:%.md=%.html)$(MAKECMDGOALS:%.md=%.pdf)

现在您确实可以调用
make a.md
。我还是喜欢上面两个选项中的一个。

谢谢你的回复,实际上我想创建一个通用的makefile。因此,我希望将目标名称作为输入(在调用make时)。如何在调用make时通过变量传递所需的源代码?感谢您的帮助!!:)这个解决方案是有效的,但是如果我们在调用make时不需要传递变量名和值,那么它可能会更加优雅。不能像
make a.md
那样只获取值并将其存储在源变量中吗?非常感谢!希望这有助于。。。现在有多个可供选择。我个人可能会选择中间的例子,第一段中的第一个选项。谢谢你的回复,实际上我想创建一个通用的makefile。因此,我希望将目标名称作为输入(在调用make时)。如何在调用make时通过变量传递所需的源代码?感谢您的帮助!!:)这个解决方案是有效的,但是如果我们在调用make时不需要传递变量名和值,那么它可能会更加优雅。不能像
make a.md
那样只获取值并将其存储在源变量中吗?非常感谢!希望这有助于。。。现在有多个可供选择。我个人可能会选择中间的例子,开头一段的第一个选项。