寫Makefile(三)

來源:互聯網
上載者:User

 前面寫了“寫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值。

但是這樣有一個缺點,這樣會把目錄下的所有源檔案都編譯進來,有些檔案可能你不希望編譯的,可能會引起不必要的錯誤。

可以根據自己的需要選擇。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.