makefile一個模板

來源:互聯網
上載者:User

標籤:style   blog   color   使用   os   檔案   ar   div   

INCLUDE+=-I./Include -I/usr/local/include/libxml2 -I/usr/local/ssl/include -I/usr/local/include TARGET=Agent LIB=-lstdc++ -lrt -lpthread -lxml2 OBJS:=$(patsubst %.cpp,%.o,$(wildcard *.cpp)) $(TARGET):${OBJS}                 $(CC) $^ $(LIB) -g -o [email protected].cpp.o:                 $(CC) $(FLAGS) $(INCLUDE) -g -o [email protected] -c $<clean:                 rm -rf $(TARGET)                 rm -f $(OBJS)#########################################

 

rm命令:

 

-f  忽略不存在的檔案,從不給出提示。

 

 -r, -R 指示rm將參數中列出的全部目錄和子目錄均遞迴地刪除。

 

 

一般我們可以使用“$(wildcard *.c)”來擷取工作目錄下的所有的.c檔案清單。複雜一些用法;可以使用“$(patsubst %.c,%.o,$(wildcard *.c))”,首先使用“wildcard”函數擷取工作目錄下的.c檔案清單;之後將列表中所有檔案名稱的尾碼.c替換為.o。這樣我們就可以得到在目前的目錄可產生的.o檔案清單。

patsubst 應該是 makefile 裡的一個函數 (如果你問的 patsubst 是其他語言裡的,那就別看下面的了)

比方說你在 makefile 裡定義了一個變數,內容是一堆 .c 檔案的的名字,如

SRC = aaa.c  bbb.c  my.c his.c

你可以用 patsubst 根據 某種模式,將這些名字改成另外的,比如將這些 .c 檔案的名字變成 .s 為尾碼的名字:

NEW = $(patsubst "%.c", "%.s", ${SRC})

這樣 NEW 這個變數中,就記錄了 aaa.s  bbb.s  my.s his.s 這些尾碼名為 .s 的檔案。 上面命令中的模式字串就是 "%.c" 或 "%.s", 而其中的 "%" 就是特殊的匹配字元,對於 aaa.c 這個字串來說,  "%.c" 中的% 就匹配 aaa。 這個很像我們在 bash 或者 dos 下用 *.c 匹配所有 .c 檔案時候的那個 *

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.