私はmake
makefileの使い方を学んでいて、次のような小さなファイルを作成しました。
%.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
.html
Makefileを介してすべてのソースファイル(次に終わる)をインポートするwildcard
。
アスファルト代替リストされている各ソースファイルのSRC
宛先は.markdown
。.html
。偽常に役に立たないため、常に実行される非物理的ターゲットを一覧表示します。通常とall
ですclean
。
これターゲットall
:
依存関係を持つすべてのファイル(右側にリストされているファイル*.markdown
)これは、これらの目標がすべて実装されたことを意味します。
%.markdown: %.html
pandoc -o $< $@
このコードスニペットは次のように言います。で終わるすべてのターゲットは.markdown
同じ名前のファイルに依存しますが、依存関係は.html
.Thisで終わります。ワイルドカード%
*
殻のように扱われます。しかし、右レースは%
左レースと比較されます。源泉。
ノート前のスペースシーケンスは標準として定義されているため、pandoc
aです。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
ファイルを作成します。