簡體   English   中英

Makefile找不到目標

[英]Makefile does not find target

我有以下Makefile,但它不起作用。 當我打電話

make html

我得到一個

make: *** No rule to make target `docs/index.html', needed by `html'.  Stop.

錯誤,即使我認為我已經定義了它。

SRCDIR = source
OUTDIR = docs

RMD = $(wildcard $(SRCDIR)/*.Rmd)

TMP  = $(RMD:.Rmd=.html)
HTML = ${subst $(SRCDIR),$(OUTDIR),$(TMP)}


test:
    echo $(RMD)
    echo $(TMP)
    echo $(HTML)


all: clean update html

html:   $(HTML)

%.html: %.Rmd
    echo $(HTML)
    @Rscript -e "rmarkdown::render('$<', output_format = 'prettydoc::html_pretty', output_dir = './$(OUTDIR)/')"

update:
    @Rscript -e "devtools::load_all(here::here()); microcosmScheme:::updateFromGoogleSheet(token = './source/googlesheets_token.rds')"


## from https://stackoverflow.com/a/26339924/632423
list:
    @$(MAKE) -pRrq -f $(lastword $(MAKEFILE_LIST)) : 2>/dev/null | awk -v RS= -F: '/^# File/,/^# Finished Make data base/ {if ($$1 !~ "^[#.]") {print $$1}}' | sort | egrep -v -e '^[^[:alnum:]]' -e '^$@$$' | xargs

.PHONY: update clean cleanhtml all list

變量似乎是正確的:

15:21 $ make test
echo source/index.Rmd
source/index.Rmd
echo source/index.html
source/index.html
echo docs/index.html
docs/index.html

如果我按照以下方式進行更改,則它可以工作,但是目標指向SRCDIR,但我希望它指向OUTDIR:

RMD = $(wildcard $(SRCDIR)/*.Rmd)

HTML  = $(RMD:.Rmd=.html)
# HTML = ${subst $(SRCDIR),$(OUTDIR),$(TMP)}

我相信這是一件小事...

這條規則:

%.html : %.Rmd
        ....

告訴make如何從foo.Rmd文件構建文件foo.html或從source/foo.Rmd文件foo.Rmd文件source/foo.html或從docs/foo.Rmd文件docs/foo.Rmd docs/foo.html文件。

它沒有告訴make如何從文件source/foo.Rmd構建文件docs/foo.html ,因為匹配模式%的詞干是不同的。

如果要編寫從source/foo.Rmd構建docs/foo.html的模式,則必須這樣編寫:

$(OUTDIR)/%.html : $(SRCDIR)/%.Rmd
      ....

因此與模式%匹配的部分相同。

ETA其他一些注意事項:您應該在wildcard函數中使用:= ,因為它的性能要好得多。 另外,您不應該在這里使用subst ,因為它會替換所有出現的字符串,如果您的任何.Rmd文件包含例如字符串source (例如source/my_source_file.Rmd ,它都可能會破壞事情(最好用patsubst ,如:

RMD := $(wildcard $(SRCDIR)/*.Rmd)
HTML := $(patsubst $(SRCDIR)/%.Rmd,$(OBJDIR)/%.html,$(RMD))

最后,您沒有顯示clean目標的作用,但是讓all依賴clean目標是不尋常的。 通常,它是一個單獨的目標,僅在需要時才調用,例如make clean

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM