当前位置: 首页 > article >正文

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


http://www.kler.cn/a/465844.html

相关文章:

  • 专家混合(MoE)大语言模型:免费的嵌入模型新宠
  • 当今世界如何减少暴戾之气和矛盾纷争
  • python多张图片生成/合成gif
  • Hadoop集群之间实现免密登录
  • 【Leetcode 热题 100】74. 搜索二维矩阵
  • STLG_01_08_程序设计C语言 - 数组
  • C# 设计模式(创建型模式):原型模式
  • 电子应用设计方案84:智能 AI衣柜系统设计
  • 什么是 Azure OpenAI ?了解微软 Azure OpenAI 和 OpenAI 的关系
  • RabbitMQ基础篇之Java客户端 消息转换器
  • 解决移动端v-html繁体字标点符号上下剧中问题
  • 区块链技术为电商API接口带来的数据安全革新
  • Django REST framework 源码剖析-视图类详解(Views)
  • 麒麟操作系统服务架构保姆级教程(七)Nginx+PHP+Mysql部署服务
  • 如何二次封装组件(vue3版本)
  • npx和npm和pnpm的异同
  • 基于SpringBoot在线竞拍平台系统功能实现十三
  • 1.3 距离度量
  • go项目zero框架中用gentool解决指定MYSQL表生成结构体被覆盖的解决方案
  • 【网络协议】开放式最短路径优先协议OSPF详解(二)
  • dbeaver导入导出数据库(sql文件形式)
  • 深入探讨爬虫的核心理念:设计原则与关键技术
  • 关于Zotero
  • 高阶无源和有源滤波器
  • 【docker】笔记
  • 壁纸样机神器,适合初学者使用吗?