จริงๆแล้วคุณพูดถูกมันเรียกใช้ make อีกแบบ ทางออกที่เป็นไปได้คือ:
.PHONY : clearscr fresh clean all
all :
    compile executable
clean :
    rm -f *.o $(EXEC)
fresh : clean clearscr all
clearscr:
    clear
โดยการโทรหาmake freshคุณจะได้รับcleanเป้าหมายก่อนจากนั้นสิ่งclearscreenที่ทำงานclearและในที่สุดก็allทำงานได้
แก้ไข 4 ส.ค.
จะเกิดอะไรขึ้นในกรณีของการสร้างแบบขนานพร้อม-jตัวเลือกของ make ? มีวิธีแก้ไขคำสั่งซื้อ จากคู่มือการจัดทำส่วน 4.2:
อย่างไรก็ตามในบางครั้งคุณมีสถานการณ์ที่คุณต้องการกำหนดลำดับที่เฉพาะเจาะจงบนกฎที่จะเรียกใช้โดยไม่บังคับให้อัปเดตเป้าหมายหากกฎข้อใดข้อหนึ่งถูกดำเนินการ ในกรณีนี้คุณต้องการกำหนดข้อกำหนดเบื้องต้นสำหรับคำสั่งซื้อเท่านั้น ข้อกำหนดเบื้องต้นสำหรับคำสั่งเท่านั้นสามารถระบุได้โดยการวางสัญลักษณ์ไปป์ (|) ในรายการข้อกำหนดเบื้องต้น: ข้อกำหนดเบื้องต้นใด ๆ ทางด้านซ้ายของสัญลักษณ์ไปป์เป็นเรื่องปกติ ข้อกำหนดเบื้องต้นใด ๆ ทางด้านขวาคือคำสั่งเท่านั้น: เป้าหมาย: ข้อกำหนดเบื้องต้นปกติ | สั่งซื้อเฉพาะสิ่งที่จำเป็น
ส่วนข้อกำหนดเบื้องต้นปกติอาจว่างเปล่า นอกจากนี้คุณยังสามารถประกาศข้อกำหนดเบื้องต้นหลายบรรทัดสำหรับเป้าหมายเดียวกันได้: มีการต่อท้ายอย่างเหมาะสม โปรดสังเกตว่าถ้าคุณประกาศว่าไฟล์เดียวกันเป็นทั้งสิ่งที่จำเป็นต้องมีตามปกติและตามคำสั่งเท่านั้นข้อกำหนดเบื้องต้นตามปกติจะมีความสำคัญเหนือกว่า (เนื่องจากเป็นส่วนเหนือที่เข้มงวดของลักษณะการทำงานของสิ่งที่จำเป็นต้องมีคำสั่งเท่านั้น)
ดังนั้น makefile จึงกลายเป็น
.PHONY : clearscr fresh clean all
all :
    compile executable
clean :
    rm -f *.o $(EXEC)
fresh : | clean clearscr all
clearscr:
    clear
แก้ไข 5 ธ.ค.
ไม่ใช่เรื่องใหญ่ที่จะรันมากกว่าหนึ่งอินสแตนซ์ makefile เนื่องจากแต่ละคำสั่งภายในงานจะเป็นsub-shellอย่างไรก็ตาม แต่คุณสามารถมีวิธีการที่นำมาใช้ใหม่โดยใช้ฟังก์ชั่นการโทร
log_success = (echo "\x1B[32m>> $1\x1B[39m")
log_error = (>&2 echo "\x1B[31m>> $1\x1B[39m" && exit 1)
install:
  @[ "$(AWS_PROFILE)" ] || $(call log_error, "AWS_PROFILE not set!")
  command1  # this line will be a subshell
  command2  # this line will be another subshell
  @command3  # Use `@` to hide the command line
  $(call log_error, "It works, yey!")
uninstall:
  @[ "$(AWS_PROFILE)" ] || $(call log_error, "AWS_PROFILE not set!")
  ....
  $(call log_error, "Nuked!")
               
              
.PHONY :จะถือว่าเป็นคำหลักบางคำที่ได้รับการดำเนินการเสมอในขณะที่เป้าหมายที่ไม่ใช่ของปลอมมีจุดมุ่งหมายเพื่อเป็นไฟล์