นี่คือโซลูชันการทำงานทั่วไปที่อ้างอิงจาก @ Beta
ฉันใช้ GNU Make 4.1 กับSHELL=/bin/bash
บน Makefile ของฉันดังนั้น YMMV!
สิ่งนี้ช่วยให้เรายอมรับข้อโต้แย้งเพิ่มเติม (โดยไม่ต้องทำอะไรเลยเมื่อเราได้งานที่ไม่ตรงกันแทนที่จะโยนข้อผิดพลาด)
%:
@:
และนี่คือมาโครที่ได้รับ args สำหรับเรา:
args = `arg="$(filter-out $@,$(MAKECMDGOALS))" && echo $${arg:-${1}}`
นี่คืองานที่อาจเรียกสิ่งนี้ว่า:
test:
@echo $(call args,defaultstring)
ผลลัพธ์จะเป็น:
$ make test
defaultstring
$ make test hi
hi
บันทึก! คุณอาจจะดีกว่าการใช้ "Taskfile" ซึ่งเป็นรูปแบบ bash ที่ทำงานคล้าย ๆ กันโดยไม่ต้องใช้ความแตกต่างของ Maketools ดูhttps://github.com/adriancooney/Taskfile