makefile 简单用例

清华大佬耗费三个月吐血整理的几百G的资源,免费分享!....>>>

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
#========命令==[      简单示例根据实际修改添加        ]
CC          =   gcc             #c语言编译命令
AR          =   ar              #编译静态库命令
LD          =   ld              #编译动态库命令
RM          =   rm -rf          #强制删除命令,一般用于删除  .o  文件
#========参数(nameFLAGS) ===================
#C语言编译器参数
CFLAGS      =   -g -Wall    $(HFFLAGS)
#编辑静态库参数        .a  静态库后缀
AFLAGS      =   -r
#编辑动态库参数        .so 动态库后缀
SOFLAGS =   -fPIC -shared
#FH(head file)头文件路径参数   -I.(当前路径)   默认有:/usr/local/include/ 和   /usr/include/
HFFLAGS =   -I.
#LD(library dir)库路径参数       -L.(当前路径)   默认有:/usr/local/lib/     和   /usr/lib/
LDFLAGS =   -L.    
#LD(library name)库名称参数  -lNAME  等价搜索路径下的 libNAME.a 或 libNAME.so
#非系统默认库必须指明使用那些库    如:libpthread.a  Linux系统下的线程库
LMFLAGS =   -lWorld -lpthread
LDMFLAGS    =   $(LDFLAGS)  $(LMFLAGS)
#优化参数
OFLAGS      =   -O0            
#========目标==============================
#所有生产目标
all         :   libaray excute 
#编译成库的文件名   如:libWorld.so
libaray     :   libWorld.so
#编程成执行文件的文件名    如:hello
excute      :   hello
#========编译==============================
#%o:%c 旧格式 .c.o:    所有的[.c]文件生成相应的[.o]文件。若生成目标是"a.o b.o",那么"%c"就是"a.c b.c"。
#[Tab]$(CC)则替换为前面赋值的内容,每个命令前面必定为Tab
%o:%c
    $(CC) $(CFLAGS) -c $<   
#编译执行文件
hello   :hello.o    libWorld.so
    $(CC) $(LDMFLAGS)   -o$@  $?
#编译动态库
libWorld.so:World.o
    $(CC) $(SOFLAGS)    -o$@  $?
#可用make -f makefile.steel clear清除
clean:
    $(RM) *.o
 
#========  以下为解释,非makefile脚本
 
$@: 规则中的目标名(也就是规则名)。$<:  规则中的依赖项目,只代表规则所有依赖项目中的第一项!$^:  规则中所有的依赖项目。$?:  规则中时间新于目标的依赖项目
make  -f  makefile.linux clear调用clean
make  -f  makefile.linux > log.txt 将编译过程的内容保存在log.txt中