Makefile 学习

makefile学习

本文用来介绍Makefile的用法

一、 什么是makefile

makefile定义了一系列规则来指定哪些文件需要先编译,哪些文件需要后编译,哪些需要重新编译,也就是说用来实现自动化编译,本来编译这件事是由开发环境帮忙完成的,但是在Unix下,则需要makefile:

  1. 编译 , 源文件生成中间代码文件的过程叫编译;
  2. 链接 ,把大量的可中间代码文件合成可执行文件的过程叫做链接;

二、makefile的规则

target…: prerequisites
   command
target是生成的目标文件,prerequisite是源文件,command是要执行的命令。

三、 makefile的语法

1. 判断
关键字功能
ifeq判断参数是否相等,相等为true,不相等为false
ifneq判断参数是否不相等,不相等为true,相等为false
ifdef判断是否有值,有值为true,没有值为false
ifndef判断是否没值,没有值为true,有值为false

ifeq表示条件语句的开始,并指定一个比较条件,else表示当条件不满足时执行的部分,不是所有条件都需要执行,endif是判断语句结束标志,所有条件判断结束都要有该语句。

2.通用函数
  1. wildcard:扩展函数,展开为已经存在的匹配模式指定模式的使用管控个分隔的文件列表;若指定模式均不匹配,则返回空。
    例:SRC=$(wildcard $(ALG_SRCPATH)/*.c),src 等于ALG_SRCPATH路径下的所有.c文件。
  2. patsubst:替换函数,
    例:OBJS := ( p a t s u b s t (patsubst %.c,%.o, (patsubst(SRC)),把src路径下的所有.c文件替换成.o文件赋值给OBJS
  3. filter:过滤掉字符串中不符合指定模式的内容,可以指定多个过滤模式,模式表达式之间使用空格分隔
    例:all:
    @echo $(fileter %.o %s, 1.c 2.o 3.s)
    输出:2.o 3.s
  4. strip:去除字符串前后的空格
    例:str1:= he   llo
    all:
    @echo (strip $(str1))
    输出:he llo
  5. foreach:循环处理一些操作
  6. notdir:去除文件的路径信息,只保留文件名
    all:
    @echo $(notdir test/1.c test/2.c)
    输出:1.c 2.c
  7. subst:以指定的替换规则替换文本中的字符串
  8. eval:对指定内容进行二次展开,使得其中的内容被make进行解析和执行
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值