1. 程式人生 > >makefile一例

makefile一例

賦值 調用 read turn 如果 uil att req bob

嘗試編寫了第一個makefile,此makefile支持:

1、源碼、編譯中間文件、目標文件 區分目錄存放;

2、程序A、程序B分開編譯,公用部分自動編譯;

 1 CC = g++
 2 ifeq ($(cpu), arm)
 3     CC := arm_g++
 4 endif
 5 
 6 CURR_DIR = $(shell pwd)
 7 OBJ_DIR  = build
 8 BIN_DIR  = bin
 9 VPATH    = code : code/aa : code/bb
10 CXXFLAGS = -I$(CURR_DIR)/code/platform -I$(CURR_DIR)/code
11 12 13 # 14 libSource = $(notdir $(wildcard code/*.cpp)) 15 libObjs = $(libSource:%.cpp=$(OBJ_DIR)/%.o) 16 17 $(libObjs): $(OBJ_DIR)/%.o : %.cpp 18 $(CC) -c $(CXXFLAGS) $< -o $@ 19 20 #make aa 21 aaSource = $(notdir $(wildcard code/aa/*.cpp)) 22 aaObjs = $(aaSource:%.cpp=$(OBJ_DIR)/%.o) 23 24
aa: $(aaObjs) $(libObjs) 25 $(CC) -o $(BIN_DIR)/$@ $^ 26 @echo done 27 28 $(aaObjs): $(OBJ_DIR)/%.o : %.cpp 29 $(CC) -c $(CXXFLAGS) $< -o $@ 30 31 32 #make bb 33 bbSource = $(notdir $(wildcard code/bb/*.cpp)) 34 bbObjs = $(bbSource:%.cpp=$(OBJ_DIR)/%.o) 35 36 bb: $(bbObjs) $(libObjs)
37 $(CC) -o $(BIN_DIR)/$@ $^ 38 @echo done 39 40 $(bbObjs): $(OBJ_DIR)/%.o : %.cpp 41 $(CC) -c $(CXXFLAGS) $< -o $@ 42 43 44 #make clean 45 .PHONY : clean 46 clean: 47 rm -fr $(OBJ_DIR)/*.o 48 49 50 51 #打印變量 52 #一種方式:$(shell echo $(aaObjs) > readme.txt ) 53 show: 54 @echo "CC : "$(CC) 55 @echo "curr dir : "$(CURR_DIR) 56 #命令tab開頭 57 [email protected],echo時命令顯示 58 59 #賦值 60 # = 是最基本的賦值(類似宏替換) 61 # := 是覆蓋之前的值(類似C語句) 62 # ?= 是如果沒有被賦值過就賦予等號後面的值 63 # += 是添加等號後面的值 64 65 #函數調用 66 # return = $(functionname arg1,arg2,arg3...) 67 # wildcard 返回文件名,包括路徑,例如:SRC = $(wildcard *.c ./foo/*.c) 68 # notdir 去除文件路徑,例如:SRC = $(notdir wildcard) 69 # patsubst 替換,例如:OBJ = $(patsubst %.c %.o $(SRC)) 70 71 #指定源文件路徑 72 # VPATH = dir1 : dir2 73 # 另外vpath用來定義查找的路徑與匹配的模式 74 75 #靜態模式 76 # <targets ...>: <target-pattern>: <prereq-patterns ...> 77 # <commands> 78 # $< 表示所有的依賴目標集 79 # $@ 表示目標集

makefile一例