第十九篇 路径搜索的综合示例

 项目类型分析:

这是一种扁平的代码管理方式。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手册 

原文地址:https://www.cnblogs.com/wanmeishenghuo/p/9735188.html