Apakah spasi atau tab di depan pandocperintah. Make terkenal pilih-pilih soal tab dan bukan spasi.
slm
@slm: itu tab. Saya membaca di suatu tempat bahwa Windows 'EOL tidak kompatibel, jadi saya dikonversi ke seluruh file ke EOL yang kompatibel dengan Unix.
ahmed
Jawaban:
17
Masalah:
Masalah Anda adalah yang maketidak tahu tentang target Anda.
Anda dapat menjalankan Makefile di atas dengan make stackoverflow.markdownmisalnya dan itu akan berhasil.
make hanya saja, bagaimanapun, akan gagal, karena Anda hanya menentukan cara membuat target Anda, tetapi bukan yang mana.
SRCdapatkan semua file sumber (yang diakhiri .html) melalui Makefile's wildcard.
TAR menggantikan setiap file sumber yang terdaftar SRCdengan target yang berakhir dengan .markdownbukannya .html.
.PHONY mencantumkan target non-fisik yang selalu ketinggalan zaman dan karenanya selalu dieksekusi - ini sering alldan clean.
The Targetall memiliki sebagai ketergantungan (file tercantum di sisi kanan :) semua *.markdownfile. Ini berarti semua target ini dieksekusi.
%.markdown: %.html
pandoc -o $< $@
Cuplikan ini mengatakan: Setiap target yang diakhiri .markdownbergantung pada file dengan nama yang sama, kecuali bahwa dependensi diakhiri dengan .html. The wildcard% harus dilihat sebagai *seperti di shell. Namun, %di sisi kanan, dibandingkan dengan pertandingan di sisi kiri. Sumber .
Perhatikan bahwa urutan spasi putih di depan pandocadalah a TAB, karena makemendefinisikannya sebagai standar.
Akhirnya, cleantarget palsu menggambarkan cara membersihkan sistem Anda dari file yang Anda buat dengan Makefile ini. Dalam hal ini, ia menghapus semua target (file-file yang dinamai *.markdown.
Satu pertanyaan lagi: dapatkah makefilemembuat file dari awal atau hanya memperbarui file yang ada? Karena ketika saya menghapus file yang dihasilkan, itu berhenti bekerja. Saya tahu pertanyaan konyol, tapi ini Newfoundland bagi saya ^^ "
ahmed
1
Maksud Anda jika tidak ada file .markdown, maka akan dibuat? ya itu harus melakukan itu sejauh yang saya tahu
polym
1
Baik-baik saja maka. Saya akan melakukan penggalian lagi. Terima kasih atas jawaban Anda, terima kasih untuk Anda Saya berada di jalan yang benar sekarang
:)
1
Hanya ingin mengucapkan terima kasih atas jawaban yang bagus. Cara yang telah Anda jelaskan sangat mudah untuk memahami alasan di balik perintah tidak bekerja dan instruksi yang sangat rinci tentang cara melanjutkan. Terima kasih lagi.
Anda tidak memiliki target yang ditentukan di Makefile Anda. Anda dapat menentukan target pada baris perintah: make something.markdownakan menggunakan resep untuk membuat something.markdowndari something.html.
Atau Anda dapat menambahkan aturan Makefile Anda menentukan target default.
Jadi di atas, target allmemiliki semua file yang ingin Anda buat sebagai prasyarat, jadi ketika Anda make all, itu akan membuat semua file yang terdaftar.
pandoc
perintah. Make terkenal pilih-pilih soal tab dan bukan spasi.Jawaban:
Masalah:
Masalah Anda adalah yang
make
tidak tahu tentang target Anda.Anda dapat menjalankan Makefile di atas dengan
make stackoverflow.markdown
misalnya dan itu akan berhasil.make
hanya saja, bagaimanapun, akan gagal, karena Anda hanya menentukan cara membuat target Anda, tetapi bukan yang mana.Sebagai leiaz menunjukkan aturan pola di atas disebut aturan implisit .
Makefile:
Penjelasan:
SRC
dapatkan semua file sumber (yang diakhiri.html
) melalui Makefile'swildcard
.TAR menggantikan setiap file sumber yang terdaftar
SRC
dengan target yang berakhir dengan.markdown
bukannya.html
..PHONY mencantumkan target non-fisik yang selalu ketinggalan zaman dan karenanya selalu dieksekusi - ini sering
all
danclean
.The Target
all
memiliki sebagai ketergantungan (file tercantum di sisi kanan:
) semua*.markdown
file. Ini berarti semua target ini dieksekusi.Cuplikan ini mengatakan: Setiap target yang diakhiri
.markdown
bergantung pada file dengan nama yang sama, kecuali bahwa dependensi diakhiri dengan.html
. The wildcard%
harus dilihat sebagai*
seperti di shell. Namun,%
di sisi kanan, dibandingkan dengan pertandingan di sisi kiri. Sumber .Perhatikan bahwa urutan spasi putih di depan
pandoc
adalah a TAB, karenamake
mendefinisikannya sebagai standar.Akhirnya,
clean
target palsu menggambarkan cara membersihkan sistem Anda dari file yang Anda buat dengan Makefile ini. Dalam hal ini, ia menghapus semua target (file-file yang dinamai*.markdown
.sumber
makefile
membuat file dari awal atau hanya memperbarui file yang ada? Karena ketika saya menghapus file yang dihasilkan, itu berhenti bekerja. Saya tahu pertanyaan konyol, tapi ini Newfoundland bagi saya ^^ "Aturan pola adalah aturan implisit.
Anda tidak memiliki target yang ditentukan di Makefile Anda. Anda dapat menentukan target pada baris perintah:
make something.markdown
akan menggunakan resep untuk membuatsomething.markdown
darisomething.html
.Atau Anda dapat menambahkan aturan Makefile Anda menentukan target default.
Atau dengan wildcard:
Saat Anda menjalankan hanya
make
, target pertama dari aturan pertama adalah tujuan default . Tidak perlu dipanggilall
.Jadi di atas, target
all
memiliki semua file yang ingin Anda buat sebagai prasyarat, jadi ketika Andamake all
, itu akan membuat semua file yang terdaftar.sumber