SRCget to wszystkie pliki źródłowe (te kończące się na .html) przez Makefile's wildcard.
TAR zastępuje każdy plik źródłowy wymieniony w SRCcelu celem kończącym się na .markdownzamiast .html.
.PHONY wymienia niefizyczne cele, które są zawsze nieaktualne i dlatego są zawsze wykonywane - są to często alli clean.
Celall ma za zależnościami (pliki na liście po prawej stronie :) wszystkich *.markdownplików. Oznacza to, że wszystkie te cele są wykonywane.
%.markdown: %.html
pandoc -o $< $@
Ten fragment mówi: Każdy cel kończący się na .markdownjest zależny od pliku o tej samej nazwie, z tą różnicą, że kończy się zależność .html. Symbol wieloznaczny% należy traktować *jak skorupę. %Po prawej stronie, jest jednak w porównaniu do meczu na lewej stronie. Źródło .
Zauważ, że sekwencja białych znaków przed pandocjest TAB, ponieważ makedefiniuje to jako standard.
Wreszcie fałszywy cleancel przedstawia sposób czyszczenia systemu z plików utworzonych za pomocą tego pliku Makefile. W tym przypadku usuwa wszystkie cele (te pliki, które zostały nazwane *.markdown.
Jeszcze jedno pytanie: czy można makefiletworzyć pliki od zera, czy aktualizuje tylko istniejące pliki? Ponieważ po usunięciu wygenerowanych plików przestaje działać. Głupie pytanie, wiem, ale to dla mnie Nowa Fundlandia ^^ "
Ahmed
1
masz na myśli, że jeśli nie ma plików .markdown, to zostaną one utworzone? tak, powinienem to zrobić, o ile mi wiadomo
polim
1
W porządku. Zrobię więcej kopania. Dzięki za odpowiedzi, dzięki tobie jestem teraz na dobrej drodze:)
Ahmed
1
Chciałem ci tylko podziękować za świetną odpowiedź. Sposób, w jaki wyjaśniłeś, jest bardzo łatwy do zrozumienia, dlaczego polecenie nie działało, i bardzo szczegółowe instrukcje, jak postępować. Dzięki jeszcze raz.
Nie masz zdefiniowanych celów w swoim Makefile. Możesz określić cel w wierszu poleceń: make something.markdownużyje przepis do tworzenia something.markdownz something.html.
Lub możesz dodać do swojego pliku Makefile regułę określającą domyślne cele.
Tak więc powyżej cel allzawiera wszystkie pliki, które chcesz utworzyć jako warunki wstępne, więc kiedy make allto zrobisz, wszystkie wymienione pliki.
pandoc
poleceniem. Make jest notorycznie wybredny, jeśli chodzi o tabulatory, a nie spacje.Odpowiedzi:
Problem:
Problem polega na tym,
make
że nie wiesz o swoich celach.Możesz
make stackoverflow.markdown
na przykład uruchomić powyższy Makefile i będzie działać.make
tylko się nie powiedzie, ponieważ określiłeś tylko, jak utworzyć swoje cele, ale nie które.Jak wskazuje punkt Leiaz, powyższa reguła wzorcowa nazywana jest regułą domyślną .
Makefile:
Wyjaśnienie:
SRC
get to wszystkie pliki źródłowe (te kończące się na.html
) przez Makefile'swildcard
.TAR zastępuje każdy plik źródłowy wymieniony w
SRC
celu celem kończącym się na.markdown
zamiast.html
..PHONY wymienia niefizyczne cele, które są zawsze nieaktualne i dlatego są zawsze wykonywane - są to często
all
iclean
.Cel
all
ma za zależnościami (pliki na liście po prawej stronie:
) wszystkich*.markdown
plików. Oznacza to, że wszystkie te cele są wykonywane.Ten fragment mówi: Każdy cel kończący się na
.markdown
jest zależny od pliku o tej samej nazwie, z tą różnicą, że kończy się zależność.html
. Symbol wieloznaczny%
należy traktować*
jak skorupę.%
Po prawej stronie, jest jednak w porównaniu do meczu na lewej stronie. Źródło .Zauważ, że sekwencja białych znaków przed
pandoc
jest TAB, ponieważmake
definiuje to jako standard.Wreszcie fałszywy
clean
cel przedstawia sposób czyszczenia systemu z plików utworzonych za pomocą tego pliku Makefile. W tym przypadku usuwa wszystkie cele (te pliki, które zostały nazwane*.markdown
.źródło
makefile
tworzyć pliki od zera, czy aktualizuje tylko istniejące pliki? Ponieważ po usunięciu wygenerowanych plików przestaje działać. Głupie pytanie, wiem, ale to dla mnie Nowa Fundlandia ^^ "Reguły wzorców są regułami niejawnymi.
Nie masz zdefiniowanych celów w swoim Makefile. Możesz określić cel w wierszu poleceń:
make something.markdown
użyje przepis do tworzeniasomething.markdown
zsomething.html
.Lub możesz dodać do swojego pliku Makefile regułę określającą domyślne cele.
Lub z symbolem wieloznacznym:
Po uruchomieniu po prostu
make
, pierwszym celem pierwszej reguły jest domyślnym cel . Nie trzeba go nazywaćall
.Tak więc powyżej cel
all
zawiera wszystkie pliki, które chcesz utworzyć jako warunki wstępne, więc kiedymake all
to zrobisz, wszystkie wymienione pliki.źródło