回答:
あなたの問題は、それ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
.html
Makefile のすべてのソースファイル(末尾が)を取得します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は、スペースではなくタブであることで悪名高いです。