根据文件扩展名制作内容

时间:2017-04-11 18:10:13

标签: if-statement makefile gnu-make

我尝试制作一件或另一件事,具体取决于文件是否有p.mdmd

$(DST)/%.md.html: $(SRC)/%.md $(TMPHTML5)
    $(eval EXT := $(suffix $<)) 
    ifeq('$(EXT)','.p.md')
        $(PANDOC_MD_HTML) -o $@ $< -V filename=$(<F) -V otherformatspresentations=true
    else
        $(PANDOC_MD_HTML) -o $@ $< -V filename=$(<F)
    endif

但我明白了:

make site/ESPA4.Dia-0-presentacio.p.md.html -B
ifeq('.md','.p.md')
/bin/sh: -c: line 0: syntax error near unexpected token `'.md','.p.md''
/bin/sh: -c: line 0: `ifeq('.md','.p.md')'
make: *** [Makefile:103: site/ESPA4.Dia-0-presentacio.p.md.html] Error 1

1 个答案:

答案 0 :(得分:3)

为什么不打算在每种类型的文件中使用一种模式,因为打算使用make?

byte[] signedBytes = Convert.FromBase64String(signedMessage);

请注意,根据您使用订单的GNU版本可能会或可能不重要,但这适用于所有版本。

如果您想在一个规则中执行此操作,则无法使用$(DST)/%.p.md : $(SRC)/%.md $(TMPHTML5) $(PANDOC_MD_HTML) -o $@ $< -V filename=$(<F) -V otherformatspresentations=true $(DST)/%.md : $(SRC)/%.md $(TMPHTML5) $(PANDOC_MD_HTML) -o $@ $< -V filename=$(<F) 等。这是一个 make 命令,并且配方中的所有内容都会传递给。 shell不了解ifeq因此你的错误。您必须使用ifeq函数或完全使用shell语法:

$(if ...)

或者:

$(DST)/%.md.html: $(SRC)/%.md $(TMPHTML5)
        $(PANDOC_MD_HTML) -o $@ $< -V filename=$(<F) $(if $(filter %.p.md,$<),-V otherformatspresentations=true)