回答:
あなたの問題は、それmakeがあなたのターゲットについて知らないことです。
make stackoverflow.markdownたとえば、上記のMakefileを実行して動作させることができます。
make ただし、ターゲットの作成方法を指定しただけで失敗したため、失敗します。
以下のようleiazポイントがアウトだ上記のパターンルールが呼び出された暗黙のルール。
SRC = $(wildcard *.html)
TAR = $(SRC:.html=.markdown)
.PHONY: all clean
all: $(TAR)
%.markdown: %.html
pandoc -o $< $@
clean:
rm -f $(TAR)
SRC.htmlMakefile のすべてのソースファイル(末尾が)を取得しますwildcard。
TARは代用に記載されている各ソースファイルSRCで終わるターゲットで.markdownはなく、を.html。
.PHONYは、常に最新ではないため、常に実行される非物理ターゲットをリストします。これらは、多くの場合all、およびcleanです。
ターゲットはall依存関係(の右側に記載されているファイルとして持っている:)すべて*.markdownのファイルを。つまり、これらすべてのターゲットが実行されます。
%.markdown: %.html
pandoc -o $< $@
このスニペットは言う:で終わる各ターゲット.markdownは、依存関係がで終わることを除いて、同じ名前のファイルに依存しています.html。ワイルドカードは、%と見られることである*シェルのように。%右側には、しかし、左側に一致するように比較されます。ソース。
音符の空白シーケンスインフロントがそのpandocあるTABので、makeその標準として定義。
最後に、偽のcleanターゲットは、このMakefileで作成したファイルからシステムをクリーンアップする方法を示しています。この場合、すべてのターゲット(という名前のファイル)が削除され*.markdownます。
makefile最初からファイルを作成できますか、それとも既存のファイルのみを更新しますか?生成されたファイルを削除すると、動作が停止するためです。ばかげた質問ですが、これは私にとってニューファンドランドです^^ "
Makefileにターゲットが定義されていません。コマンドラインでターゲットを指定できます:make something.markdownから作成するレシピを使用something.markdownしsomething.htmlます。
または、デフォルトのターゲットを指定するルールをMakefileに追加できます。
all: file1.markdown file2.markdown
またはワイルドカードを使って:
all: *.markdown
あなただけ実行するとmake、最初のルールの最初の目標は、デフォルトの目標です。呼び出す必要はありませんall。
上記のように、ターゲットにallは前提条件として作成するすべてのファイルがあるため、を実行make allすると、リストされたすべてのファイルが作成されます。
pandocコマンドの前のスペースかタブですか。Makeは、スペースではなくタブであることで悪名高いです。