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-outlà 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".