Hej, jag sitter och skriver ett dokument i LaTeX och har skrivit en makefile för att underlätta kompilering. För att kompilera .tex-filer till .dvi har jag följande regel i makefilen:
%.dvi: %.tex
ifeq ($(TWICE),yes)
$(LATEX) "$(DOCUMENTCLASS) \input{$<}"
rm $(LATEXCLS).dvi
$(LATEX) "$(DOCUMENTCLASS) \input{$<}"
mv $(LATEXCLS).dvi $@
else
$(LATEX) "$(DOCUMENTCLASS) \input{$<}"
mv $(LATEXCLS).dvi $@
endif
Så långt funkar det bra. Säger jag "make complex_anticipation.dvi" kompilerar den complex_anticipation.tex till complex_anticipation.dvi, säger jag "make TWICE=yes complex_anticipation.dvi" kompilerar den två gånger (vilket man vill göra ibland för att undvika keck med innehållsförteckningar, korsreferenser et.c.).
Men – om jag har en fil som inkluderar andra filer vill jag naturligtvis att den ska inse att .dvi-filen som skapas vid kompilering är förbi bäst-före-datum. Alltså har jag lagt in följande lilla rad där jag definierar dokumentets beroenden:
complex_anticipation.tex: macros.tex hyphenations.tex bibliography.tex
... eftersom complex_anticipation.tex inkluderar de tre filerna. Och det är här problemet börjar – om jag kompilerar till .dvi, ändrar i exempelvis macros.tex men inte i complex_anticipation.tex, menar make att "complex_anticipation.dvi is up to date", vilket den ju inte är. Så här ser en typisk kommandoradssession ut:
[gustaf-c@l324 real_deal]$ [b]make complex_anticipation.dvi[/b]
[i]... latex kompilerar min .tex-fil...[/i]
[gustaf-c@l324 real_deal]$ [b]touch macros.tex[/b]
[gustaf-c@l324 real_deal]$ [b]make complex_anticipation.dvi[/b]
make: `complex_anticipation.dvi' is up to date.
Nu är jag inte så jättehej på make, så därför frågar jag: Varför funkar det inte? Används inte beroenden på det här viset?