前面寫了“寫Makefile(二)”,現在對前面的Makefile作一個改進。
現在源檔案有三個,分別是:main.cpp,tdes.c和tdes.h,Makefile內容如下:
CC=aCC<br />DEFS=-AA -g<br />INCLUDES= -I.<br />LINKFLAGS=$(DEFS)<br />LIBS=</p><p>TARGET=main</p><p>DEFINES= $(DEFS) $(INCLUDES)<br />CFLAGS= $(DEFINES) </p><p>OBJS=main.o tdes.o</p><p>all:$(TARGET)</p><p>.cpp.o:<br />rm -f $@<br />$(CC) $(CFLAGS) -c $*.cpp</p><p>.c.o:<br />rm -f $@<br />$(CC) $(CFLAGS) -c $*.c</p><p>$(TARGET):$(OBJS)<br />$(CC) $(LINKFLAGS) -o $(TARGET) $(OBJS) $(LIBS)</p><p>clean:<br />rm -rf $(OBJS)<br />rm -rf $(TARGET)
看到了嗎,現在沒有對每個.o檔案單獨寫一個依賴規則,今後幾十增加更多的.c和.cpp檔案,只需要在OBJS檔案後面添加一個.o檔案的名字就可以了。
上面的辦法已經比較簡便了,但是還有人嫌編輯那麼多.o名字麻煩,那麼還有一個辦法,Makefile更改如下:
CC=aCC<br />DEFS=-AA -g<br />INCLUDES= -I.<br />LINKFLAGS=$(DEFS)<br />LIBS=</p><p>TARGET=main</p><p>DEFINES= $(DEFS) $(INCLUDES)<br />CFLAGS= $(DEFINES)</p><p>OBJS=$(patsubst %.c,%.o,$(wildcard *.c)) $(patsubst %.cpp,%.o,$(wildcard *.cpp))</p><p>all:$(TARGET)</p><p>.cpp.o:<br />rm -f $@<br />$(CC) $(CFLAGS) -c $*.cpp</p><p>.c.o:<br />rm -f $@<br />$(CC) $(CFLAGS) -c $*.c</p><p>$(TARGET):$(OBJS)<br />$(CC) $(LINKFLAGS) -o $(TARGET) $(OBJS) $(LIBS)</p><p>clean:<br />rm -rf $(OBJS)<br />rm -rf $(TARGET)
上面通過$(patsubst %.c,%.o,$(wildcard *.c)) 和$(patsubst %.cpp,%.o,$(wildcard *.cpp),將目錄下.c和.cpp檔案名稱字全部轉化成.o檔案清單,並賦予變數OBJS值。
但是這樣有一個缺點,這樣會把目錄下的所有源檔案都編譯進來,有些檔案可能你不希望編譯的,可能會引起不必要的錯誤。
可以根據自己的需要選擇。