ในโลกของการพัฒนาซอฟต์แวร์ขนาดใหญ่ การจัดการขั้นตอนการทำงานที่สลับซับซ้อนเป็นสิ่งจำเป็นอย่างยิ่ง ทั้ง Shell Script และ Makefiles ต่างก็ทำหน้าที่ในการทำให้กระบวนการเหล่านี้อัตโนมัติ แต่บ่อยครั้งที่เราพบสถานการณ์ที่โค้ดส่วนหนึ่งถูกเขียนขึ้นมาเพื่อรันแบบลำดับจาก Bash script โดยไม่ได้คำนึงถึงโครงสร้างของระบบ Build ที่มีการพึ่งพาอาศัยกัน เมื่อใดก็ตามที่คุณต้องแปลงชุดคำสั่งจากการเรียกใช้เชิงเส้นตรงให้กลายเป็น Target ใน Makefile คุณกำลังย้ายมุมมองจากการ ‘ดำเนินการตามลำดับ’ ไปสู่ ‘นิยามความสัมพันธ์และเงื่อนไข’ ซึ่งเป็นการเปลี่ยนแปลงแนวคิดทางวิศวกรรมบรรทัดฐาน
เข้าใจพื้นฐาน: ความแตกต่างระหว่าง Scripts กับ Targets
ก่อนอื่น เราต้องแยกให้ออกว่า shell scripts ทั่วไปจะเน้นการ execute คำสั่งทีละรายการโดยมีลักษณะการไหลเวียนที่เป็นเหตุผลต่อเนื่อง (‘Sequential Flow’) ขณะที่ GNU Makefiles นั้นไม่ใช่แค่ตัวรวมกลุ่มคำสั่งเท่านั้น แต่มันคือเครื่องมือสำหรับการกำหนด