Tôi đã xem How to manually call another target from a make target?, nhưng câu hỏi của tôi hơi khác một chút; xem xét ví dụ này (lưu ý, stackoverflow.com thay đổi các tab để khoảng trống trong màn hình, nhưng các tab được bảo quản trong nguồn, nếu bạn cố gắng chỉnh sửa):Thay đổi biến số và gọi một quy tắc khác, từ một công thức trong cùng một 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!
Ở đây, nếu tôi chạy target mặc định (pdflatex
), tôi nhận được đầu ra mong đợi:
$ make pdflatex
echo the engine is pdflatex
the engine is pdflatex
Nhưng, với mục tiêu lualatex
, tôi muốn:
- thay đổi các
make
biếnTEXENGINE
đểlualatex
và sau đó - gọi cùng mã như trong
pdflatex
(sử dụng nó).
Tôi làm cách nào để làm điều đó?
Rõ ràng, trong quy tắc lualatex
của tôi, tôi thậm chí không quản lý để thay đổi biến TEXENGINE
, bởi vì tôi có được điều này khi tôi thử nó:
$ 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!
... vì vậy tôi thực sự muốn biết nếu có điều gì như thế này là có thể trong Makefiles.
Đối với một sự khởi đầu, tôi sẽ không gọi đó là mục tiêu 'pdflatex', nếu bạn đang sử dụng nó để kiểm tra thứ tùy ý. Tôi muốn đề nghị một cái gì đó như 'checkEngine', và làm cho nó' .PHONY'. –
Cảm ơn, @OliverCharlesworth - Tôi nghĩ rằng đó là tốt, bởi vì 'pdflatex' trong trường hợp sử dụng này là mặc định, và vì vậy tôi nhận được kết quả tương tự cho chỉ' make' hoặc 'make pdflatex' (và trường hợp sử dụng là sau đó để thay đổi động cơ bằng cách chỉ định chúng làm mục tiêu để 'make', như trong' make lualatex'). Chúc mừng! – sdaau
Vâng, nó tùy thuộc vào bạn;) (Tôi thấy rằng thực tế khá khó hiểu và không tốt ...) Bạn có thể làm 'làm TEXENGINE = bất cứ điều gì', và cấu trúc một bộ chung các mục tiêu/quy tắc sử dụng người dùng chỉ định Biến 'TEXENGINE'? –