Ho già visto How to manually call another target from a make target?, ma la mia domanda è un po 'diversa; considerare questo esempio (nota, stackoverflow.com cambia le tabulazioni in spazi in esposizione, ma le schede sono conservati in formato sorgente, se si tenta di modificare):Modificare una variabile make e chiamare un'altra regola da una ricetta nello stesso Makefile?
TEXENGINE=pdflatex
pdflatex:
echo the engine is $(TEXENGINE)
lualatex:
TEXENGINE=lualatex
echo Here I want to call the pdflatex rule, to check $(TEXENGINE) there!
Qui, se corro il target di default (pdflatex
), ottengo i risultati attesi:
$ make pdflatex
echo the engine is pdflatex
the engine is pdflatex
Ma, con l'obiettivo lualatex
, voglio:
- cambiamento della variabile
make
TEXENGINE
alualatex
e quindi - chiama lo stesso codice di
pdflatex
(che lo utilizza).
Come potrei farlo?
Chiaramente, nel mio lualatex
regola io non riesco nemmeno a modificare la variabile TEXENGINE
, perché ottengo questo quando l'ho provato:
$ make lualatex
TEXENGINE=lualatex
echo Here I want to call the pdflatex rule, to check pdflatex there!
Here I want to call the pdflatex rule, to check pdflatex there!
... quindi mi piacerebbe davvero sapere se qualcosa come questo è possibile nei Makefile.
Tanto per cominciare, non lo definirei tale obiettivo 'pdflatex', se lo si usa per controllare roba arbitraria. Suggerirei qualcosa come 'checkEngine', e renderlo' .PHONY'. –
Grazie, @OliverCharlesworth - Penso che vada bene, però, perché "pdflatex" in questo caso d'uso è l'impostazione predefinita, quindi ottengo lo stesso risultato per "make" o "make pdflatex" (e il caso d'uso è quindi cambiare i motori specificandoli come obiettivi per 'make', come in' make lualatex'). Saluti! – sdaau
Bene, dipende da te;) (Troverò che pratica piuttosto confusa e cattiva ...) Puoi semplicemente fare 'make TEXENGINE = whatever', e strutturare un insieme generico di target/regole che usano l'utente specificato Variabile 'TEXENGINE'? –