Makefile学习记录

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档


一、常用函数

1.ifeq

  • 传参的话,可在输入make指令时,同时赋值变量来进行传参
  • 比较字符串,待比较的字符串不能用双引号括住
  • 执行语句不能有函数之类(echo),只能赋值
  • 注意:只看VAR打印即可

比较整形测试记录

  1
  2 SRC := $(wildcard *.c)
  3
  4 OBJS := $(patsubst %.c, %.o, ${SRC})
  5
  6 VAR=0
  7
  8 ifeq (${mytest},10)
  9         VAR=40
 10 else
 11         VAR=0 
 12 endif
 13
 14 .PHONY: ${OBJS} test
 15
 16 all: main.o func.o
 17         echo ${VAR}
 18         echo ${mytest}
 19         gcc main.o func.o -o test
 20
 21 test:
 22         @echo ${OBJS}
 23         @for i in ${OBJS};do \
 24         echo $${i}; \
 25         done
 26 func.o :
 27         gcc func.c -c
 28 main.o :
 29         gcc main.c -c

在这里插入图片描述

比较字符串测试记录

  1
  2 SRC := $(wildcard *.c)
  3
  4 OBJS := $(patsubst %.c, %.o, ${SRC})
  5
  6 VAR=0
  7
  8 ifeq (${mytest},all)
  9         VAR=40
 10 else
 11         VAR=0
 12 endif
 13
 14 .PHONY: ${OBJS} test
 15
 16 all: main.o func.o
 17         echo ${VAR}
 18         echo ${mytest}
 19         gcc main.o func.o -o test
 20
 21 test:
 22         @echo ${OBJS}
 23         @for i in ${OBJS};do \
 24         echo $${i}; \
 25         done
 26 func.o :
 27         gcc func.c -c
 28 main.o :
 29         gcc main.c -c
~
~
~

在这里插入图片描述

2.for

for实现如下
makefile for测试源码
![makefile for测试结果](https://img-blog.csdnimg.cn/6691fc7dac874232a1542de80584251f.png

3.wildcard

  • wildcard *.c
  • 通配符用*,用%没用

wildcard测试记录

样例

4.patsubst

  • patsubst 源格式,目的格式,源文件
  • 通配符用%
    例:获得当前src,并转换为目标OBJS变量
    在这里插入图片描述

二、语法记录

make选项含义

选项含义
-g可执行程序包含调试信息,目的是为了给GDB工具调试程序使用
-o指定输出文件名,不指定默认为a.out
-c只编译不链接,产生.o文件,不产生执行文件
-C将当前的工作目录切换到指定目录中
-f指定文件作为makefile运行
-D执行gcc过程中给程序添加宏定义
-Wall编译后显示所有警告
-L指定链接的第三方库所在的目录
-nostdlib不链接系统标准启动文件和标准库文件,只把指定的文件传递给链接器

在脚本中使用命令

  • 在脚本中使用常见命令,如ls,pwd等
  • 用 ‘`’符号包裹住命令字符(这个是数字键1左边的符号)
    执行命令测试记录
    在这里插入图片描述

匹配多重目标

  • 在uboot中,可见配置命令 make xxx_config,用来进行uboot配置,在makefile目标使用%_config来进行匹配
    %_config 测试样例
    在这里插入图片描述

变量嵌套引用跟() {}使用对比

  • 变量可以嵌套引用,如 ( ( ((VAR1))

(),{}比较,变量嵌套引用测试样例

在这里插入图片描述

include包含其他文件

  • 可使用include关键字包含其他文件,如.config Kconfig 等
  • 也使用一个makefile包含另外一个标准编译makefile来进行指导编译

include测试样例,var1 var2实际打印如下
在这里插入图片描述

同一个目标可以分散写,有多个依赖

  • 执行规则只有一个,但是依赖可以有多个且可以分开写
    例:test1的依赖test2和test3,分开做两行写也可以
    在这里插入图片描述

二次展开

make读取makefile会进行一次展开,随后把展开后的数据传给shell,如下图使用 $$i时,展开得到的是 $i,故打印的是 $i,而使用 $i时,展开得到的是空,故打印的是空。

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

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值