-
Notifications
You must be signed in to change notification settings - Fork 58
/
log.txt
149 lines (112 loc) · 3.73 KB
/
log.txt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
多目录的Makefile
v0.3.1 2018.12.11
新加stm32的Makefile。
v0.3 2018.8.30
较大修改,使用更方便,适用于单个目录、多个目录。自动识别动态库、静态库。
v2.0.1
较大修改,用于多个工程,*只能*在指定目录下创建临时目录。
2017.4.17:
在非调试条件下,库文件也做优先,以保证一致。
2016.3.13:
小优化
=======================================================================================
2016.3.1:
优化单个目录的makefile模板。可多个目录源码。
============================================
版本:v2.0.1
2011-12-24
应用场合:
src目录下有许多子目录,各子目录包含不同功能代码模块,include为所有头文件目录,也可放到各自子目录中,主函数在main(或其它目录)中,子模块生成静态库,生成可执行文件时链接静态库。
描述:
可在执行make时指定编译目录(build dir),也可在Makefile中指定,如不指定,默认在各个子目录下生成。生成文件有:目标文件.o,依赖文件.depend,静态库文件.a,可执行文件a.out在与总Makefile相同目录。
文件说明:
Makefile:总Makefile
config.mk:配置文件,包括编译器、头文件路径等等,在此文件添加编译.c、.cpp规则,其它Makefile不用添加
rules.mk:产生依赖关系文件
mkconfig:示意性脚本,即在Makefile中可调用外部脚本文件
各子目录均有Makefile,该文件只需要修改源代码文件及库名称即可
特点:
1、修改头文件后,所有依赖该头文件者均重新编译。
2、临时文件及源代码文件分开,保持源代码目录干净整洁。
3、目录下可存在.c、.cpp文件,需要分别指定。或统一使用C++编译器,或各自编译。
不足:
1、当目录存在.c、.cpp文件,需要分别指定,但可用通配符指定
2、针对多个工程
目录结构:
src/
├─ bar
│ ├── bar.c
│ ├── bar.o
│ ├── crc.cpp
│ ├── crc.o
│ ├── foo.c
│ ├── foo.o
│ ├── libbar.a
│ └── Makefile
├─ foo
│ ├── foobar.cpp
│ ├── foobar.o
│ ├── libfoo.a
│ ├── Makefile
│ └── not-foo.cpp
├─ include
│ ├── backtrace.h
│ ├── bar.h
│ ├── crc.h
│ └── foo.h
└─ main
├── config.mk
├── main.cpp
├── Makefile
├── mkconfig
└── rules.mk
其中main目录的main.c为主函数。
编译:make
删除:make clean
彻底删除:make distclean(包括目录)
/////////////////////////////////////////////////////////////////////////////
修改版本log:
不存在_obj等目录时,自动创建,尝试修改头文件,也会编译,失败,暂时不搞。
目标文件、库文件、可执行文件在自动创建的目录中。
///////////////////////////////////////
main.c还在src,未独立
-->未添加依赖关系,准备按u-boot的来搞。
///////////////////////////
main.c在src下的main目录中
按u-boot添加depend文件,放到src外面的_dep目录下
修改头文件,还是不会编译。
/////////////////////////////
将depend文件放到all中,修改头文件会自动编译
添加distclean,删除临时目录_obj、_lib、_dep、_bin。
_dep目录为依赖文件,在每个文件添加以该目录名为后缀,如.depend_foo
/////////////////////
修改.depend_dir后缀的宏
//////////////
不显示编译全部命令,只显示“Compling: xxx.c”
///////////////////
1.8
修改主Makefile,将库编译及.out编译分开,如下:
all: project1 project2
project1: $(LIBS) xxx
xxx
project2: $(LIBS) xxx
xxx
$(LIBS):
xxx
bug:
多个工程依赖同一个库文件(名称、文件一样,内容不同),可能会导致没有重新编译库
主Makefile为示意性语句
未完成:
debug及release分开,或make时均编译,make debug|release就编译指定的
//////////////////////////
v1.8.1
在1.8基础上
修改:主程序使用g++,其余子目录中,.c用gcc,.cpp用g++,各自编译
添加:在主Makefile中调用外部shell脚本(示意性脚本)
/////////////////////////////////////////
v2.0
可以在指定的目录中创建子目录及.o文件,如不指定,在源代码同目录生成.o文件及库文件。
bug:主代码文件如何存放?obj是以CURDIR(Makefile所在目录)判断的,如果主代码在main目录中,但该目录没有Makefile,则不会创建main目录
==>解决:在主Makefile中添加创建命令。也可以将主代码文件放到主Makefile同一目录中。
无需指定子目录,只需指定库目录及文件名即可。
clean时,使用find命令