makefile

Makefile
=和:=
x := foo
y := $(x) bar
x := later
其等價於:
y := foo bar
x := later


目標:$@ 表示規則中的目標文件集。若是有多個目標,那麼,"$@"就是匹配於目標中模式定義的集合。
依賴:$^ 全部的依賴集合。以空格分隔。若是在依賴目標中有多個重複的,那個這個變量會去除重複的依賴目標,只保留一份。
依賴:$< 依賴第一個名字。若是依賴目標是以模式(即"%")定義的,那麼"$<"將是符合模式的一系列的文件集。注意,其是一個一個取出來的。

變量:在Makefile中的定義的變量,就像是C/C++語言中的宏同樣
objects = program.o foo.o utils.o
program : $(objects)
cc -o program $(objects)

Makefile shell注意點
http://www.blogjava.net/jasmine214--love/archive/2012/01/10/368191.html
1:盡在Makefile文件的目標項冒號後的另起一行的代碼纔是shell代碼。
2:Makefile中的shell,每一行是一個進程,不一樣行之間變量值不能傳遞。因此,Makefile中的shell無論多長也要寫在一行。
3:Makefile中的變量以$開頭, 因此,爲了不和shell的變量衝突,shell的變量以$$開頭


SOURCES = $(foreach d,$(SRCDIRS),$(wildcard $(addprefix $(d)/*,$(SRCEXTS))))
OBJS= $(patsubst %.cpp,./obj/%.o,$(notdir $(SOURCES)))
GCNOS= $(patsubst %.cpp,./obj/%.gcno,$(notdir $(SOURCES)))


Makefile文件範例
注意使用tab鍵做爲命令的開始,行尾不須要空格,尤爲是wins->linux會出現問題

#BASE_DIR :=$(shell pwd)

SUBDIRS= fnd_system fnd_pzasset

#@取消命令自己的輸出
#$1 shell第一個參數
define make_subdir
 @for subdir in $(SUBDIRS); do \
 pwd && echo $$subdir && echo $1 && echo $@ || exit $$?;  \
 done;
endef

#.PHONY 說明 all等等爲僞命令
.PHONY : all install clean
all :
    @echo $(BASE_DIR)
    $(call make_subdir, all)

install : 
    $(call make_subdir, install)

debug :
    $(call make_subdir, debug)

clean :
    $(call make_subdir, clean)
相關文章
相關標籤/搜索
本站公眾號
   歡迎關注本站公眾號,獲取更多信息