Nie mogę wymusić, aby make
użyć bardziej szczegółowej reguły. Pracuję z wersją 3.81, która jest supposed to use the first rule it comes to, ale to nie działa, gdy bardziej szczegółowa reguła ma zależność , która musi być skonstruowana z inną regułą. Oto podstawowe obrazku:Wymuś zastosowanie bardziej szczegółowej reguły
#rule for the dependency of the more specific rule
%.bbl: %.tex *.bib
<build the .bbl file>
#more specific rule
some_prefix%.pdf: some_prefix%.tex some_prefix%.bbl
<build the .pdf>
#general rule
%.pdf: %.tex
<build the .pdf>
Więc zasadniczo chcę make
budować pdf z pliku .bbl
jeśli pasuje some_prefix
, inaczej używać bardziej ogólną zasadę. Niestety, chyba że usunę zależność od pliku .bbl
, druga zasada nigdy nie zostanie wywołana.
wydaje mi się, aby móc dostać pracy poprzez dodanie hack do ogólnej zasady:
%.pdf: %.tex %.hack
<make the pdf with a more general rule>
%.hack: %.tex
touch [email protected]
To wydaje się działać, a .hack
pliki są automatycznie usuwane, ale jak sama nazwa wskazuje, jest to straszny hack. Wygląda na to, że musi istnieć jakiś lepszy sposób na wymuszenie zastosowania konkretnej reguły.
Jak mogę zmusić markę do korzystania z bardziej szczegółowej reguły? Wprowadzenie go na pierwszy plan nie pomaga.
Reguła '% .bbl' działa poprawnie sama? To znaczy, że możesz uruchomić 'make some_prefix_something.bbl' gdy istnieje plik' some_prefix_something.tex' i losowy '* .bib' i czy działa on poprawnie? Co 'make -d' mówi o tym, co robi, gdy nie używa reguły w sposób, jakiego oczekujesz? –
@EtanReisner, to ciekawe: jeśli najpierw zrobię plik '.bbl', a potem utworzę' .pdf', to działa. Plik '.bbl' zwykle jest usuwany po uruchomieniu, ale (to jest to, czego chcę), więc nie działa bez jawnego tworzenia' .bbl'. – Shep
Dokładnie tego oczekiwałbym od mojej odpowiedzi poniżej: gdy istnieją pliki 'bbl', to jest to krok 5 algorytmu, ponieważ plik wymagań wstępnych już istnieje. Dopiero gdy pliki jeszcze nie istnieją, muszą spróbować użyć łączenia reguł, aby je utworzyć. – MadScientist