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

Makefile语法

文章目录

  • 使用
  • 符号
  • 变量
  • 函数
    • $(foreach var, list, text)
    • $(filter pattern..., text)
    • $(filter-out pattern..., text)
    • $(wildcard pattern)
    • $(patsubst pattern, replacement, $(var))
  • 依赖
  • CFLAGS

使用

make 【目标】
若不加目标,默认执行第一个目标

符号

  • 通配符 %
  • $@ 表示目标
  • $< 表示第一个依赖文件
  • $^ 表示所有依赖文件
    在这里插入图片描述
    .PHONY:【目标】 防止同名

变量

  • 即时变量(简单变量),延时变量

  • 在这里插入图片描述
    在这里插入图片描述

  • 变量使用: $(变量名)

函数

$(foreach var, list, text)

  • 功能:遍历 list 中的每个元素,将其赋值给变量 var,然后对 text 进行展开(text 中可以使用 var 引用当前遍历的元素),最后将所有展开结果拼接成一个新的字符串列表。
  • 示例:
names := Alice Bob Charlie
greetings := $(foreach name, $(names), Hello $(name))
#最终 greetings 的值为 "Hello Alice Hello Bob Hello Charlie"

$(filter pattern…, text)

  • 功能:从 text(通常是由空格分隔的字符串列表)中,筛选出符合 pattern(可以是通配符模式,多个模式用空格分隔)的字符串,组成新的列表。
files := a.c b.h c.c d.txt
c_files := $(filter %.c, $(files))
# 最终 c_files 的值为 "a.c c.c"

$(filter-out pattern…, text)

  • 功能:与 filter 相反,从 text 中筛选出不符合 pattern 的字符串,组成新的列表
files := a.c b.h c.c d.txt
non_c_files := $(filter-out %.c, $(files))
# 最终 non_c_files 的值为 "b.h d.txt"

$(wildcard pattern)

  • 功能:在当前目录下,匹配符合 pattern(通配符模式,如 *.c 匹配所有 .c 文件)的文件,返回存在的文件列表(由空格分隔)。如果不用 wildcard,Makefile 不会自动展开通配符(会把 *.c 当作普通字符串处理)
src_files := $(wildcard *.c)
# 假设当前目录有 a.c、b.c,那么 src_files 的值为 "a.c b.c"

$(patsubst pattern, replacement, $(var))

  • 功能:对变量 var 中的每个元素(元素间以空格分隔),如果符合 pattern(可以包含通配符,类似 %.c),就将其替换为 replacement(replacement 中可以用 % 引用 pattern 中匹配的部分),最终得到替换后的字符串列表。
src_files := a.c b.c
obj_files := $(patsubst %.c, %.o, $(src_files))
# 最终 obj_files 的值为 "a.o b.o"

依赖

在这里插入图片描述
在这里插入图片描述

CFLAGS

  • 主要用途
    • 指定编译选项:控制编译器行为
    • 定义宏:在编译时传递宏定义
    • 设置警告级别:控制编译器输出的警告信息
    • 指定优化等级:控制代码优化程度
    • 指定头文件搜索路径:告诉编译器去哪里找头文件
# 启用所有警告并将警告视为错误
CFLAGS="-Wall -Werror"# 启用优化(等级 2)
CFLAGS="-O2"# 定义宏 DEBUG(等价于代码中的 #define DEBUG)
CFLAGS="-DDEBUG"# 添加头文件搜索路径
CFLAGS="-I/usr/local/include -I./include"# 生成调试信息(供 gdb 使用)
CFLAGS="-g"# 综合示例
CFLAGS="-Wall -O2 -g -I./include -DVERSION=1.0"

使用示例

CFLAGS = -Wall -O2 -I./includeall: myprogrammyprogram: main.o utils.ogcc $(CFLAGS) -o myprogram main.o utils.omain.o: main.cgcc $(CFLAGS) -c main.cutils.o: utils.cgcc $(CFLAGS) -c utils.c
http://www.dtcms.com/a/443967.html

相关文章:

  • 极速网站建设哪家便宜wordpress twitter登陆
  • 同德县网站建设公司重庆涪陵网站设计公司哪家专业
  • 钟祥网站建设凡客诚品网站特点
  • 新手做淘宝客网站教程网站建设培训学校
  • 网站建设网络推广公司北京高端网站建设制作设计
  • 关于建立公司网站的申请免费咨询皮肤科医生回答在线
  • 如何软件网站优化公司玉环 企业网站建设
  • 广州营销型网站制作上海平台网站建设
  • 临沂网站建设服务商网站建设5000费用
  • 个人网站备案流程wordpress新建文章模型
  • 如何在谷歌上做网站建筑公司企业愿景及理念模板
  • 营销型企业网站的功能有哪些综合购物网站排名
  • 外贸购物网站开发百度关键字
  • 网站整体风格网站专题页优化
  • 用户注册网站开发建站saas
  • 内蒙古建设协会网站网站建设企业关键词
  • 太原做手机网站电商运营方案计划书
  • BUUCTF [OGeek2019]babyrop wp
  • 有没有做网页的网站网店代运营什么意思
  • 用vs做网站原型做网站要运用到代码吗
  • html网站成品下载台州品牌网站建设
  • wordpress 审核免费优化网站建设
  • 陕西省城乡住房建设厅网站男女做的那个视频网站
  • 网站建设合同模式保险查询平台
  • 容器技术基础概念学习记录
  • wordpress多站点 用户同步徐州人才网
  • 茂名网站建设公司成全视频免费观看在线看第6季动漫影视大全
  • 外国人做的古文字网站那个网站可以做软件出售的
  • 做门户网站服务器选择济南高新网站制作
  • 贵阳网站建设需要多少钱做印刷网站公司哪家好