关于Makefile









Makefile

Makefile.............................................................................................................................. 1

1.      文件的命名规则.......................................................................................................... 3

1.1.      Makefile................................................................................................................ 3

1.2.      makefile................................................................................................................ 3

2.      用途.............................................................................................................................. 3

2.1.      项目代码编译管理.............................................................................................. 3

2.2.      节省编译项目的时间.......................................................................................... 3

2.3.      一次编写终身受益.............................................................................................. 3

3.      基本规则...................................................................................................................... 3

3.1.1.       目标:依赖 (tab)命令............................................................................ 3

3.1.2.       Makefile会把规则中的第一个目标作为终极目标................................... 4

4.       工作原理..................................................................................................................... 4

4.1.      若想生成目标,检查规则中的依赖条件是否存在,  如果不存在,寻找是否有规则用来生成该依赖文件   4

4.2.      检查规则中的目标是否需要更新,必须检查它的所有依赖,  依赖中有任意一个被更新,则目标必须更新............................................................................................................................. 4

4.2.1.       依赖文件比目标文件时间晚,则需要更新............................................... 4

5.       执行............................................................................................................................. 4

5.1.      make --> 通过makefile生成目标文件............................................................. 4

5.1.1.       直接 make (使用makefile文件).......................................................... 4

5.1.2.       make -f mm (指定一个名字不为makefile的文件)................................... 4

5.2.      make clean --> 清除编译生成的中间.o文件和最终目标文件........................ 4

5.2.1.       如果当前目录下有同名clean文件,则不执行clean对应的命令......... 4

5.2.2.       特殊符号....................................................................................................... 4

6.       变量............................................................................................................................. 4

6.1.      普通变量.............................................................................................................. 5

6.1.1.       变量定义及赋值:obj = a.o b.oc.o............................................................. 5

6.1.2.       变量取值:foo = $(obj)................................................................................ 5

6.1.3.       由 Makefile 维护的一些变量.................................................................... 5

6.2.      自动变量.............................................................................................................. 5

6.2.1.       变量............................................................................................................... 5

6.2.2.       模式规则....................................................................................................... 5

7.       函数............................................................................................................................. 6

7.1.      makefile中所有的函数必须都有返回值........................................................... 6

7.2.      wildcard................................................................................................................ 6

7.2.1.       查找指定目录下指定类型的文件,一个参数........................................... 6

7.2.2.       src = $(wildcard ./src/*.c).......................................................................... 6

7.3.      patsubst................................................................................................................. 6

7.3.1.       匹配替换,从src中找到所有.c 结尾的文件,并将其替换为.o............ 6

7.3.2.       obj = $(patsubst %.c ,%.o ,$(src)).................................................................. 6

7.3.3.       ob = $(patsubst ./src/%.c, ./obj/%.o, $(src)).................................................. 6


1.      文件的命名规则

1.1.         Makefile

1.2.         makefile

2.      用途

2.1.         项目代码编译管理

2.2.         节省编译项目的时间

2.3.         一次编写终身受益

3.      基本规则

3.1.          

3.1.1.          目标:依赖
(tab)命令

目标 --> 要生成的目标文件
伪目标
依赖 --> 生成目标文件需要的一些文件
命令 --> 借助依赖文件生成目标文件的手段
忽略错误命令继续执行
不显示执行时候的命令细节
tab --> 缩进,有且只有一个

3.1.2.          Makefile会把规则中的第一个目标作为终极目标

all:app -->all指定生成的最终目标为app

4.      工作原理

4.1.         若想生成目标,检查规则中的依赖条件是否存在,

如果不存在,寻找是否有规则用来生成该依赖文件

4.2.         检查规则中的目标是否需要更新,必须检查它的所有依赖,

依赖中有任意一个被更新,则目标必须更新

4.2.1.          依赖文件比目标文件时间晚,则需要更新

5.      执行

5.1.         make --> 通过makefile生成目标文件

5.1.1.          直接 make (使用makefile文件)

5.1.2.          make -f mm (指定一个名字不为makefile的文件)

5.2.         make clean --> 清除编译生成的中间.o文件和最终目标文件

5.2.1.          如果当前目录下有同名clean文件,则不执行clean对应的命令

解决方案 --> 伪目标声明:.PHONY:clean

5.2.2.          特殊符号

- :表示此条命令出错,make也会继续执行后续的命令。如:“-rm a.o b.o”

6.      变量

6.1.         普通变量

6.1.1.          变量定义及赋值:obj = a.o b.o c.o

6.1.2.          变量取值:foo = $(obj)

6.1.3.          由 Makefile 维护的一些变量

通常格式都是大写
CC:默认值 cc
有些有默认值,有些没有
CPPFLAGS : 预处理器需要的选项 如:-I
CFLAGS:编译的时候使用的参数 –Wall –g -c
LDFLAGS :链接库使用的选项 –L -l
用户可以修改这些变量的默认值
CC = gcc

6.2.         自动变量

6.2.1.          变量

$@ --> 规则中的目标
$< --> 规则中的第一个依赖条件
$^ --> 规则中的所有依赖条件

6.2.2.          模式规则

在规则的目标定义中使用 %
在规则的依赖条件中使用 %
示例:
%.o:%.c
$(CC) –c $< -o $@
$< --> 表示依次取出依赖条件
$@ --> 表示依次取出目标值

7.      函数

7.1.         makefile中所有的函数必须都有返回值

7.2.         wildcard

7.2.1.          查找指定目录下指定类型的文件,一个参数

7.2.2.          src = $(wildcard ./src/*.c)

找到./src 目录下所有后缀为.c的文件,赋给变量src

7.3.         patsubst

7.3.1.          匹配替换,从src中找到所有.c 结尾的文件,并将其替换为.o

7.3.2.          obj = $(patsubst %.c ,%.o ,$(src))

把src变量中所有后缀为.c的文件替换成.o

7.3.3.          ob = $(patsubst ./src/%.c, ./obj/%.o, $(src))

指定.o 文件存放的路径 ./obj/%.o


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值