makefile獲取依賴的源文件

###makefile獲取依賴的源文件code

<p>代碼:blog

exclude="_test"
#exclude="___"
src=$(wildcard *[^$(exclude)].c ./subs/*.c)

dir=$(notdir $(src))

obj=$(patsubst %.c,%.o,$(dir) )

all:
        @echo $(src)
        @echo $(dir)
        @echo $(obj)
        @echo "end"
  • wildcard經過通配符來匹配文件並將結果展開,第一個參數排除了_test.c的文件。
  • notdir去掉src中的目錄,只保留文件名
  • patsubst進行替換,把.c換成.o

<p>上面代碼參考[Makefile中的wildcard用法][1]這篇blog,稍微修改了下。test

###UPDATEfile

  • 上面的代碼makefile

    exclude="_test"
      #exclude="___"
      src=$(wildcard *[^$(exclude)].c ./subs/*.c)

<p>其實有點問題,`*[^$_test].c`這個正則只能過濾.c以前是'_','t','e','s'這4個字符的文件名,達不到想要的目的。 須要修改一下,對src進行替換di

$(patsubst %_test.c,, $(src))

這樣就把文件列表中含_test.c的去掉了。修改後爲文件

src :=$(wildcard *.c ./subs/*.c)
src :=$(patsubst %_test.c,,$(src))

dir :=$(notdir $(src))

obj :=$(patsubst %.c,%.o,$(dir) )

all:
        @echo $(src)
        @echo $(dir)
        @echo $(obj)
        @echo "end"
相關文章
相關標籤/搜索