项目类型分析:
这是一种扁平的代码管理方式。makefile直接放到项目文件夹下面。
示例工程:
源码的目录如下:
最终的makefile如下:
1 .PHONY : all clean 2 3 4 DIR_BUILD := build 5 DIR_SRC := src 6 DIR_INC := inc 7 8 TYPE_INC := .h 9 TYPE_SRC := .c 10 TYPE_OBJ := .o 11 12 CC := gcc 13 LFLAGS := 14 CFLAGS := -I $(DIR_INC) 15 ifeq ($(DEBUG),true) 16 CFLAGS += -g 17 endif 18 19 MKDIR := mkdir 20 RM := rm -fr 21 22 APP := $(DIR_BUILD)/app.out 23 HDRS := $(wildcard $(DIR_INC)/*$(TYPE_INC)) 24 HDRS := $(notdir $(HDRS)) 25 OBJS := $(wildcard $(DIR_SRC)/*$(TYPE_SRC)) 26 OBJS := $(OBJS:$(TYPE_SRC)=$(TYPE_OBJ)) 27 OBJS := $(patsubst $(DIR_SRC)/%, $(DIR_BUILD)/%, $(OBJS)) 28 29 vpath %$(TYPE_INC) $(DIR_INC) 30 vpath %$(TYPE_SRC) $(DIR_SRC) 31 32 all : $(DIR_BUILD) $(APP) 33 @echo "Target File ==> $(APP)" 34 35 $(DIR_BUILD) : 36 $(MKDIR) $@ 37 38 $(APP) : $(OBJS) 39 $(CC) $(LFLAGS) -o $@ $^ 40 41 $(DIR_BUILD)/%$(TYPE_OBJ) : %$(TYPE_SRC) $(HDRS) 42 $(CC) $(CFLAGS) -o $@ -c $< 43 44 clean : 45 $(RM) $(DIR_BUILD) 46 47
第41行是模式规则。
这个makefile非常易于扩展到相同架构的项目。
func.h如下:
1 #ifndef FUNC_H 2 #define FUNC_H 3 4 void foo(); 5 6 #endif
func.c如下:
1 #include <stdio.h> 2 #include "func.h" 3 4 void foo() 5 { 6 printf("void foo() : %s ", "Hello, D.T.Software ..."); 7 }
main.c如下:
1 #include <stdio.h> 2 #include "func.h" 3 4 int main() 5 { 6 foo(); 7 8 return 0; 9 }
小结:
参考:
狄泰软件学院视频教程
makefile手册