2017-08-11 51 views
0

我有這個簡單的GNU製作文件:製作忽略現有規則

# Bibliografia 
BIBLIO = referencies/biblio.bib 
CSL = referencies/acm-mod.csl 
TMPATOM = plantilles/entorn.pandoc.atom.html 

# Variables 
PANDOC_MD_ATOM = pandoc --webtex --smart --from=markdown+auto_identifiers+table_captions+simple_tables+pipe_tables+strikeout+tex_math_dollars+raw_html+footnotes+inline_notes+citations+implicit_figures --to=html5 --bibliography=$(BIBLIO) --csl=$(CSL) --filter pandoc-citeproc --metadata link-citations=true --template=$(TMPATOM) 

ERB = erb -T 1 

# Què processar 
MARKDOWN_YAML_ATOM=$(shell ruby ./select.rb 'atom') 
MARKDOWN_ATOM=$(MARKDOWN_YAML_ATOM:.md=.md.atom.html) 

all: $(MARKDOWN_ATOM) 

%.md.atom.html: %.md %.md.meta $(TMPATOM) 
    $(ERB) $< | $(PANDOC_MD_ATOM) -V filename=$< $<.meta -o [email protected] 

當我運行make我得到以下錯誤:

make: *** No rule to make target 'blog/Aitor-theorem.md.atom.html', needed by 'all'. Stop 

但很顯然它是文件.md.atom.html的規則。

回答

1

當make要建立目標blog/Aitor-theorem.md.atom.html而且也爲沒有明確的規則,它會尋找一個規則相匹配的目標。

當它看着你的模式規則時,它將與Aitor-theorem的一個詞幹(%的匹配部分)和一個目錄前綴blog/相匹配。所以,當它構建先決條件的模式時,它將爲詞幹和目錄使用相同的值;也就是說,使將檢查目標是否blog/Aitor-theorem.mdblog/Aitor-theorem.md.meta(當然plantilles/entorn.pandoc.atom.html的),要麼已經存在或無法通過使用其他模式的規則進行。

你看到的錯誤意味着make無法弄清楚如何建立這些先決條件的一個或多個。發生這種情況時,make不能使用此模式規則(它不匹配),因此它將查找要使用的不同模式規則。如果沒有其他模式規則,則會出現此錯誤「沒有規則制定目標」,因爲沒有匹配的規則。

因爲你還沒有告訴我們您有什麼可並期望使用被命名爲實際的文件,我們不能再奉勸你。

您可以運行make -d以查看所有步驟make調用以嘗試構建您的目標(有很多輸出將其重定向到某個文件或某物)的完整跟蹤。

+0

也許編碼不好? – somenxavier