前面的一篇文章Makefile之大型工程項目子目錄Makefile的一種通用寫法介紹了大型項目子目錄Makefile的一種通用寫法,然而最近在寫Linux網絡方面的demo,一個目錄下有幾個文件,如果手工輸命令顯得太不專業了。於是按該博文的方法改編了一下Makefile,也當學習之用。該Makefile適用於一個C文件生成一個可執行程序的場景,使用該方法當工程目錄內的文件有增刪時無需對Makefile進行改動,可以說相當的智能。如果對patsubst、wildcard及subst函數不了解的話可參閱上述博文。同時在測試過程中,又發現了一種更簡潔的寫法,如代碼片段2,應該是使用了某些默認規則,由於項目較忙,還未來得及深入研究,先記錄下來,等空下來再研究,還望路過大俠多多指點。
1:如果在當前目錄中直接make的話使用下列代碼:
#General Purpose Makefile by guoqingbo
objects := $(patsubst %.c,%.o,$(wildcard *.c))
executables := $(patsubst %.c,%,$(wildcard *.c))
all : $(objects)
$(objects) : %.o: %.c
gcc -c $< -o $@
gcc $< -o $(subst .o, ,$@)
clean :
@rm -rf *.o *~
@rm -rf ${executables}
.PHONY : clean
2:後來發現下列代碼也可以有相同效果,難道使用了什麼默認規則,還不是很明白,先記錄下來:
#General Purpose Makefile by guoqingbo
executables := $(patsubst %.c,%,$(wildcard *.c))
all : $(executables)
clean :
@rm -rf *.o *~
@rm -rf ${executables}
.PHONY : clean