Make
使用 Make 時出現“無目標”錯誤
我正在學習如何使用
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列出了始終過期並因此始終執行的非物理目標 - 這些通常是
all
和clean
。目標
all
將:
所有文件作為依賴項(列在右側的文件)*.markdown
。這意味著所有這些目標都被執行。%.markdown: %.html pandoc -o $< $@
這個片段說:每個以 結尾的目標
.markdown
都依賴於同名的文件,除了依賴以.html
. 萬用字元%
*
在 shell中被視為類似。但是,將%
右側的 與左側的匹配進行比較。來源。請注意,前面的空格序列
pandoc
是 aTAB
,因為make
將其定義為標準。最後,虛假
clean
目標描述瞭如何從您使用此 Makefile 創建的文件中清除系統。在這種情況下,它會刪除所有目標(那些名為*.markdown
.