Bạn có thể không nên làm điều này; bạn đang phá vỡ khuôn mẫu cơ bản về cách hoạt động của Make. Nhưng đây là:
action:
@echo action $(filter-out $@,$(MAKECMDGOALS))
%: # thanks to chakrit
@: # thanks to William Pursell
CHỈNH SỬA:
Để giải thích lệnh đầu tiên,
$(MAKECMDGOALS)
là danh sách các "mục tiêu" được viết trên dòng lệnh, ví dụ: "action value1 value2".
$@
là một biến tự động cho tên của mục tiêu của quy tắc, trong trường hợp này là "hành động".
filter-out
là một hàm loại bỏ một số phần tử khỏi danh sách. Vì vậy, $(filter-out bar, foo bar baz)
trả về foo baz
(nó có thể tinh tế hơn, nhưng chúng ta không cần sự tinh tế ở đây).
Đặt chúng lại với nhau và $(filter-out $@,$(MAKECMDGOALS))
trả về danh sách các mục tiêu được chỉ định trên dòng lệnh không phải là "action", có thể là "value1 value2".