Make

使用 Make 時出現“無目標”錯誤

  • April 26, 2017

我正在學習如何使用make和生成文件,所以我寫了這個小文件:

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

但是當我跑步時make,我得到的只是make: *** No targets. Stop.發生了什麼事?

問題:

你的問題是make不知道你的目標。

例如,您可以執行上面的 Makefile,make stackoverflow.markdown它會起作用。

make但是,only 會失敗,因為您只指定瞭如何創建目標,但沒有指定哪個。

正如leiaz 指出的那樣,上述模式規則稱為隱式規則

生成文件:

SRC = $(wildcard *.html)
TAR = $(SRC:.html=.markdown)

.PHONY: all clean

all: $(TAR)

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

clean:
   rm -f $(TAR)

解釋:

SRC``.html通過 Makefile獲取所有源文件(以wildcard.

TAR將列出的每個源文件替換為以而不是SRC結尾的目標。.markdown``.html

.PHONY列出了始終過期並因此始終執行的非物理目標 - 這些通常是allclean

目標all:所有文件作為依賴項(列在右側的文件) *.markdown。這意味著所有這些目標都被執行。

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

這個片段說:每個以 結尾的目標.markdown都依賴於同名的文件,除了依賴以.html. 萬用字元%*在 shell中被視為類似。但是,將%右側的 與左側的匹配進行比較。來源

請注意,前面的空格序列pandoc是 a TAB,因為make將其定義為標準。

最後,虛假clean目標描述瞭如何從您使用此 Makefile 創建的文件中清除系統。在這種情況下,它會刪除所有目標(那些名為*.markdown.

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