Shell

如何使用 makefile ‘%’ 萬用字元忽略文件?

  • August 21, 2021

在 Makefile 的以下片段中,asciidoctor如果目前文件是例如“list.html”,我將如何避免執行命令。

%.html: src/%.m4
       @echo $@
       @asciidoctor -s -a linkcss -a stylesheet=plain.css src/$(LATEST).adoc
       @m4 -D__latest=$(LATEST) $< > out/$@

為此制定一個明確的規則來list.html覆蓋萬用字元。

我沒有你的asciidoctororm4設置,所以我將用 justcp:as 規則的操作來展示它(:這裡是必要的,因為沒有操作的空規則將不起作用,在你的情況下,你會在m4沒有asciidoctorfor的情況下執行list.html) ,具有以下內容Makefile

list.html:
   : do nothing for $@

%.html: %.m4
   cp $< $@

範例執行:

$ touch x.m4 list.m4
$ make x.html list.html
cp x.m4 x.html
: do nothing for list.html

:是 sh 中的“空命令”。從help :bash 中:

:: : 空命令。

No effect; the command does nothing.

Exit Status:
Always succeeds.

可以像往常一樣使用 抑制輸出@:true或者@true也可以。

引用自:https://unix.stackexchange.com/questions/665571