Makeを使用したときの「ターゲットなし」エラー

Makeを使用したときの「ターゲットなし」エラー

私はmakemakefileの使い方を学んでいて、次のような小さなファイルを作成しました。

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

しかし、走ると「どうしたの?」というmake言葉しか出ません。make: *** No targets. Stop.

答え1

質問:

あなたの問題はmakeあなたの目標を知らないことです。

たとえば、上記のMakefileを実行すると動作make stackoverflow.markdownします。

makeただし、ターゲットの作成方法のみを指定し、ターゲットを作成しないため失敗します。

〜のようにライヤズが出ました。上記のパターンルールは次のとおりです。暗黙のルール

ファイル生成:

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

.PHONY: all clean

all: $(TAR)

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

clean:
    rm -f $(TAR)

説明する:

SRC.htmlMakefileを介してすべてのソースファイル(次に終わる)をインポートするwildcard

アスファルト代替リストされている各ソースファイルのSRC宛先は.markdown.html

。偽常に役に立たないため、常に実行される非物理的ターゲットを一覧表示します。通常とallですclean

これターゲットall:依存関係を持つすべてのファイル(右側にリストされているファイル*.markdown)これは、これらの目標がすべて実装されたことを意味します。

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

このコードスニペットは次のように言います。で終わるすべてのターゲットは.markdown同じ名前のファイルに依存しますが、依存関係は.html.Thisで終わります。ワイルドカード%*殻のように扱われます。しかし、右レースは%左レースと比較されます。源泉

ノート前のスペースシーケンスは標準として定義されているため、pandocaです。TABmake

最後に、偽のcleanターゲットは、このMakefileを使用して作成されたファイルシステムをクリーンアップする方法について説明します。この場合、すべての宛先(名前*.markdownが。

答え2

パターンルールは暗黙のルールです。

Makefileに定義されたターゲットはありません。コマンドラインからターゲットを指定できます。make something.markdownレシピを使用してsomething.markdownターゲットを作成しますsomething.html

または、デフォルトのターゲットを指定するMakefileにルールを追加することもできます。

all: file1.markdown file2.markdown

またはワイルドカードの使用:

all: *.markdown

走っているときmake最初のルールの最初のターゲットはデフォルトのターゲットです。。呼び出す必要はありませんall

そこで上記の対象にはall前提条件にしたいすべてのファイルがあるので、リストされたすべてのmake allファイルを作成します。

関連情報