Linux高并发服务器开发 第八天(makefile的规则 wildcard/patsubst函数 普通变量/自动变量/其他关键字)

目录

1.makefile

1.1makefile的规则

1.2两个函数

1.3三个自动变量

1.3.1普通变量 (自定义变量)

1.3.2自动变量

1.3.3其他关键字

- ALL/all

- clean


1.makefile

- 作用:进行项目管理。
- 初步学习:1个规则、2个函数、3个自动变量。
- 要想使用默认的make命令,管理项目。makefile文件名:必须是 “makefile”  或 “Makefile”

1.1makefile的规则

语法:
目标:依赖条件
(一个tab缩进)命令

举例:

- 目标的时间,必须晚于依赖条件的时间,否则,更新目标。
- 依赖条件,如果不存在,寻找新的规则去产生依赖条件。

举例:

1.2两个函数

wildcard 函数:用来匹配文件名,得到字符串
src = $(wildcard ./*.c)  : 匹配当前工作目录下的所有.c文件。将文件名组成列表,赋值给变量 src
    相当于: src = add.c sub.c mul.c

patsubst 函数:用来字符串替换
obj = $(patsubst %.c, %.o, $(src)) : 将 参3 中,包含 参1的部分,替换为 参2.
    相当于: obj = add.o sub.o mul.o
obj = $(patsubst %.c, %, $(src))
    相当于: obj = add sub mul

举例:

可以替换为:

1.3三个自动变量

1.3.1普通变量 (自定义变量)

- 定义变量语法:变量名 = 变量值  (都是字符串)
    - 举例:foo = abc
- 取变量值语法:$(变量)
    - 举例:bar = $(foo)  ===>  bar = abc
- makefile 自带变量:
    - CC = cc
    - CPPFLAGES
    - CFLAGES
    - LDFLAGES

1.3.2自动变量

- $@: 在规则的命令中,表示规则中的目标。

替换为
- $^:  在规则的命令中,表示所有依赖条件。

- $<:  在规则的命令中,表示第一个依赖条件。如果将该变量应用在 “模式规则” 中,它可以将依赖条件列表中的每一个依赖,依次取出,套用模式规则。

替换为

1.3.3其他关键字
- ALL/all:  

    - 用来给 makefile 文件,指定 “终极目标”。

    - makefile 文件,默认的规则为:从上而下,碰到的第一个 规则中的目标,为 “终极目标”。我们可以使用 ALL 指定终极目标。

- clean:

    - 用来 借助 makefile 清除项目中的指定文件。如:*.o、a.out

    - 举例:


            

1.4模式规则

- 可以将makefile文件中,具有严格统一格式的规则,使用模式规则代替。要求模式规则中,只能使用 “$<” 符号。

- 静态模式规则:
    - 将模式规则,指定给某一个变量使用。
 $(obj):%.o:%.c
      gcc -c $< -o $@

1.5伪目标

- 针对,残缺的规则,也能使之生成目标。

makefile
.PHONY:clean ALL

1.6 其他参数

- -n:模拟执行 makefile ,不真正执行!推荐首次编写 makefile 完成时,使用!!!
- -f:指定命名为 非 “makefile” 的文件。执行make命令

1.7完成版

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

# 使用gcc 覆盖 cc
CC = gcc
target = app

ALL:$(target)

$(target):$(obj)            
    $(CC) $^ -o $@

$(obj):%.o:%.c
    $(CC) -c $< -o $@

clean:
    -rm -rf $(obj) $(target)

.PHONY:clean ALL

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值