DEV Community

Pallat Anchaleechamaikorn
Pallat Anchaleechamaikorn

Posted on

Makefile ep.1

เนื่องจากที่ผ่านมาเวลาทำ code repo ส่วนใหญ่ก็มักจะเขียน Makefile ใส่เข้าไปด้วย เพื่ออำนวยความสะดวก และอีกเหตุผลหนึ่งคือ คำสั่งบางอย่างมันยาว ก็เลยเขียนใส่ Makefile เอาไว้ เพราะขี้เกียจไปตาม googling มาใหม่นั่นเองครับ ที่มาที่ไปของการใช้ Makefile ของผมก็เป็นเช่นนี้ และไหนๆก็ใช้บ่อยแล้ว น้องๆหลายคนอาจจะเคยเข้ามาเห็นอยู่บ้าง ใช้เป็นบ้างก็ตามๆพี่ๆไป ก็เลยคิดว่า เอามาอธิบายจริงจังให้เข้าใจกันสักยกก็น่าจะดี

โดยเนื้อหาหลักตอนนี้จะเริ่มด้วยการพาไปรู้จักวิธีใช้ตามคู่มือของ GNU make manual

รูปแบบการเขียน Makefile

target … : prerequisites …
        recipe
        …
        …
Enter fullscreen mode Exit fullscreen mode

จากที่เห็นนี้อธิบายว่า target คือชื่อของคำสั่ง เวลาที่เราใช้คำสั่ง make ผมจะยกตัวอย่างจริงให้ดูเพื่อเทียบกันตามนี้นะ

start:
    echo "Hello"
show: start
    echo "Welcome to the Makefile tutorial"
Enter fullscreen mode Exit fullscreen mode

ในที่นี้ target ของเราคือคำว่า start และ show ซึ่งเวลาที่เราอยากจะสั่งให้มันไปทำงานที่ target ชื่อ start เราก็จะสั่งว่า make start แบบนี้นะครับ

prerequisites จากตัวอย่าง target show ผมเขียนให้มันมี prerequisites เป็น start หมายความว่า ถ้าเราสั่งคำสั่ง make show สิ่งที่เกิดขึ้นคือ มันจะไปทำคำสั่ง make start ให้เราก่อน เสร็จแล้วมันถึงจะมาทำตาม recipe ที่อยู่ใน show ต่อ
ซึ่งในที่นี้ recipe ของทั้ง 2 target เราทำเพียงแค่สั่ง echo ให้มันแสดงข้อความออกมาง่ายๆเท่านั้น

การตั้งชื่อไฟล์ของ Makefile เราสามารถตั้งว่า Makefile ก็ได้หรือ makefile ก็ได้เช่นกัน แต่ส่วนตัวผมชอบตั้งว่า Makefile มากกว่า ซึ่งถ้าอ่าน doc ก็จะแนะนำแบบเดียวกันครับ

recipe เราได้เห็นจากตัวอย่างนะครับว่า recipe ในตัวอย่างจะเป็นแบบโคตรง่ายเลย ก็คือสั่ง echo หรือก็คือสั่งพิมพ์ข้อความออกมาให้เราเห็นง่ายๆ สิ่งสำคัญของการวาง recipe ก็มีเพียง เราจะต้องมี indent และต้องเป็น tab เท่านั้น จะมา space ไม่ได้นะ

ทีนี้เราก็จะสามารถเริ่มต้นเขียน Makefile เบื้องต้นง่ายๆเราได้แล้ว โดยเราจะเอาไปสั่งทำอะไรก็ได้ยกตัวอย่างเช่น

go:
    echo "run Go program"
    go run main.go
install:
    echo "install nodejs dependencies"
    npm install
Enter fullscreen mode Exit fullscreen mode

หวังว่าจะเป็นประโยชน์นะครับ

Top comments (0)