Skip to content

ใช้ Makefile แบบง๊ายง่าย ก๊ากกาก

Last updated on December 23, 2013

ปกติผมคุ้นเคยกับ autotools อย่าง make อยู่แล้วเพราะใช้ลินุกซ์มาถ้าไม่เคย build โปรแกรมลงเองซักครั้งมันเหมือนยังเข้าไม่ถึงแก่นความยากของลินุกซ์ที่ user ทั่วไปบ่นกัน แต่ก็ไม่เคยได้ลองทำโปรเจกต์ที่เขียนด้วย C จนต้องใช้ autotools แต่ครั้งนี้ด้วยความขี้เกียจที่ต้อง compile ด้วย command line หลายไฟล์และขี้เกียจพิมพ์ parameters ยาวยืดตอน compile เลยได้เขียน makefile จนได้

ครั้งแรกที่เขียนอารมณ์เหมือน config ที่เป็น YML เลยครับแต่ตัว interpreter ของ makefile มันแย่กว่านั้นเยอะเพราะมันรองรับแค่ tab ถ้าใช้ editor ทั่วไปที่ไม่โชว์ symbol tab, space จะลำบากมาก ผมก็เขียนง่ายๆ ของผมตามนี้ครับ

CC = gcc
CFLAGS = -Wall -g
BIN_DIR = bin
OUT_DIR = output
ex1:	
	$(CC) $(CFLAGS) -o $@ ex1.c bmp.c
	mv $@ $(BIN_DIR)
ex2:
	$(CC) $(CFLAGS) -o $@ ex2.c bmp.c
	mv $@ $(BIN_DIR)
ex3:	
	$(CC) $(CFLAGS) -o $@ ex3.c bmp.c
	mv $@ $(BIN_DIR)
ex4:	
	$(CC) $(CFLAGS) -o $@ ex4.c bmp.c
	mv $@ $(BIN_DIR)
ex5:	
	$(CC) $(CFLAGS) -o $@ ex5.c bmp.c -lm
	mv $@ $(BIN_DIR)
all:	ex1	ex2	ex3	ex4	ex5
clean:  
	rm ./$(BIN_DIR)/ex*
	rm ./$(OUT_DIR)/ex*
	rm *.o

บรรทัดที่ 1-4 คือตัวแปร ส่วน ex1-ex4, all, clean คือ target ข้างในเราก็เรียนไว้ว่าจะให้ทำอะไรบ้าง เวลาจะ compile ก็ใช้คำสั่ง make TAGET_NAME ได้เลย ส่วน $@ เป็นคำสั่งพิเศษของ makefile คือมันจะเอาชื่อ target มาแทนเวลาทำงาน

 

Leave a Reply

Your email address will not be published.

This site uses Akismet to reduce spam. Learn how your comment data is processed.