(1) wildcard函数

作用是查找指定目录下指定类型的文件,并最终返回一个环境变量,需要用$取值赋值给另一个环境变量!该函数只有一个参数,如取出当前目录下的所有.c文件,并赋值给allc普通变量:  allc=$(wildcard ./*.c)。

(2) patsubst函数

作用是更换文件的后缀格式,共有三个参数。如将allc的所有.c的文件更换为.o的文件: allo=$(patsubst %.c,%.o,$(allc))。 

注意以上两个函数的返回值都为变量值,都必须用$取值。makefile中的所有函数都必须要有返回值。

allo1=$(patsubst %.c,./bin/%.o,$(allc))  将替换后生成的.o文件都存放在./bin/中,指出路径。

(3)不带依赖条件的规则

对于没有依赖条件,只有目标和命令的规则,说明为了实现该目标,不需要任何依赖条件,直接执行命令即可。makefile直接执行命令。下面举例说明:  再次强调一点,每一行的命令前必须有一个tab缩进,这是makefile识别命令的判断符号。

clean:

        -mkdir /aa   //-表示,该条命令执行失败了,也会继续向下执行下一条命令

        rm -f $(allo) $(target)

hello:          //举例说明,这一项在以后中不要

        echo "hello, makefile"

[root@localhost src]# make clean   //只是执行clea后面的命令即可

[root@localhost src]# make hello   //只是执行hello后面的命令即可

如果在makefile文件目录中有一个以clean或hello名字为名的文件(即相同了),则make clean和make hello不会执行命令,需要进行伪目标声明,即:

.PHONY:clean        //伪目标的声明

clean:

        -mkdir /aa   //-表示,该条命令执行失败了,也会继续向下执行下一条命令

        rm -f $(allo) $(target)

.PHONY:hello        //伪目标的声明

hello:          //举例说明,这一项在以后中不要

        echo "hello, makefile"

最后,如果makefile文件不是以makefile或Makefile为名字,需要加上-f参数:make -f filename

下面给出之前例子makefile书写的最终版,即把一个规则,两个变量和三个函数结合:

[root@localhost src]# ls
a  add.c  div.c  main.c  makefile  mul.c  sub.c
[root@localhost src]# vim zsxmakefile

allc=$(wildcard ./*.c)    //获取所有的.c文件
obj=$(patsubst %.c,%.o,$(allc))   //更换为.o文件,取得目标文件
target=zsx

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

main.o:main.c
        $(CC) -pedantic -Wall -pipe -c $^ -o $@ -I ../include

%.o:%.c
        $(CC) -pedantic -Wall -pipe -c $< -o $@
        
.PHONY:clean1  //伪目标的声明

clean1:
        -mkdir b    //-代表该条命令执行失败了,也会继续向下执行下一条命令
        rm -f $(obj) $(target)

.PHONY:hello     //伪目标的声明

hello:
        echo "hello, makefile"

[root@localhost src]# rm -f makefile 
[root@localhost src]# ls
a  add.c  div.c  main.c  mul.c  sub.c  zsxmakefile
[root@localhost src]# make -f zsxmakefile   //此时需要加-f参数
cc -pedantic -Wall -pipe -c mul.c -o mul.o
cc -pedantic -Wall -pipe -c main.c -o main.o -I ../include
cc -pedantic -Wall -pipe -c add.c -o add.o
cc -pedantic -Wall -pipe -c div.c -o div.o
cc -pedantic -Wall -pipe -c sub.c -o sub.o
cc -ggdb3 mul.o main.o add.o div.o sub.o -o zsx
[root@localhost src]# ls
a  add.c  add.o  div.c  div.o  main.c  main.o  mul.c  mul.o  sub.c  sub.o  zsx  zsxmakefile
[root@localhost src]# make -f zsxmakefile clean1    //注意使用方法  如果文件名字是makefile或Makefile,则直接为make clean1
mkdir b
rm -f ./mul.o ./main.o ./add.o ./div.o ./sub.o zsx
[root@localhost src]# ls
a  add.c  b  div.c  main.c  mul.c  sub.c  zsxmakefile
[root@localhost src]# make -f zsxmakefile hello //注意使用方法
echo "hello, makefile"
hello, makefile

//注意区分makemake cleanmake hello的作用

makefile中的两个函数(wildcard和patsubst)相关推荐

  1. matlab绘制两个函数,用matlab程序 在同一图中绘制两个函数,这两个函数分别是: , ,,matlab怎样同时画出两个函数图...

    导航:网站首页 > 用matlab程序 在同一图中绘制两个函数,这两个函数分别是: , ,,matlab怎样同时画出两个函数图 用matlab程序 在同一图中绘制两个函数,这两个函数分别是: , ...

  2. Makefile中的常用函数——wildcard,patsubst,filter

    Makefile中的常用函数 wildcard 提取文件用 #拿到DIR指定目录的所有文件 SRC = $(wildcard $(DIR)) #拿到当前文件夹下的 *.cpp 文件 src=$(wil ...

  3. Linux学习笔记-Makefile中的变量及函数

    Makefile中的变量 此处的变量不是C/C++,Java等中的变量(认为他是一个字符串就阔以了) 一般变量名用大写字母来写,如下所属: SUBDIR = src xml SUBDIR += osa ...

  4. Python中的两种函数可变长度参数类型:*args, **kwargs

    文章目录 1 简介 2 问题 3 分析 4 示例扩展 5 小结 1 简介 在Python的函数定义中, 我们可以看到有类似 fun(v1, *args, **kwargs) 这样的内容,其中*args ...

  5. mysql iso 时间_mysql 中 时间和日期函数

    原文链接: mysql 中 时间和日期函数 - redfox - 博客园 http://www.cnblogs.com/redfox241/archive/2009/07/23/1529092.htm ...

  6. matlab怎么求两个数的和,matlab怎么求出两个函数的交点

    matlab中,两个自变量的函数怎么求最大值(急!1) 需求:利用matlab求解二元函数y=f(x1,x2)=(339-0.01*x1-0.003*x2)*x1+(399-0.004*x1-0.01 ...

  7. matlab如何输出一个函数的图像,在matlab中如何输出一个函数的图像

    点击查看在matlab中如何输出一个函数的图像具体信息 答:A. imread imread函数用于读入各种图像文件,其一般的用法为 [X,MAP]=imread('filename','fmt')其 ...

  8. Makefile 中的subst

    Linux中subst是字符串处理函数. Makefile里的subst 用法是$(subst FROM,TO,TEXT),即将TEXT中的东西从FROM变为TO Makefile中的字符串处理函数 ...

  9. python中sort函数是什么意思_python中sort和sorted函数

    在学习python的过程中,感觉python中的排序相和c++中的泛型算法还是比较相似的,但相对于c++而言更加简单易用. python中列表的内置函数sort()可以对列表中的元素进行排序,而全局性 ...

最新文章

  1. ASP.NET 2.0 中配合 Master Page 使用的优化 CSS 模型
  2. Android adb shell 命令
  3. Mysql学习总结(4)——MySql基础知识、存储引擎与常用数据类型
  4. VLC-DSS搭建直播系统中链路断开影响测试
  5. BZOJ 3639: Query on a tree VII LCT_set维护子树信息
  6. Java7 HashMap详解
  7. 【转】搭建Java版WebService
  8. 怎么判断一个字符串的最长回文子串是否在头尾_【Leetcode每日打卡】最长回文串...
  9. 如何保证消息不被重复消费~~~~~(如何保证消息队列的幂等性)
  10. 电脑桌面归纳小窗口_电脑一分钟小技巧:如何将电脑设置为定时关机?
  11. android mp4语音识别,怎样用语音识别将一段视频转化为文字, 比如:百度的语音识别api...
  12. centos7 关闭防火墙的指令_Centos7.3防火墙配置
  13. 关于使用struts2上传文件时获取不到文件内容的问题的解决方案
  14. 初学Java,第一段代码
  15. Python电影票房数据可视化分析基础实践
  16. Cadence OrCAD Capture 全局修改TitleBlock信息
  17. volatility命令
  18. 台信M18金属感应开关传感器三线NPN常开
  19. Python-玩转数据-python网络编程
  20. 最全面的挤出模具知识汇总!收藏收藏吧!!!

热门文章

  1. 爆款短视频剪辑方法技巧,这样剪辑出来的短视频更容易爆,收藏
  2. Python使用PIL打开图片
  3. antd4.x版本解决父组件传递给子组件值的时候动态显示initialValue值的问题
  4. Treating as key frame since WebRTC-SpsPpsIdrIsH264Keyframe is disabled 解决
  5. 【ML】第九章 无监督学习技术
  6. 王炸DTS空间音效耳机——极度未知HyperX毒刺灵动版游戏无线耳机
  7. 微信二次开发教程(1)微信公众号介绍
  8. java打印格式_Java 打印格式
  9. BitLocker解锁与关闭
  10. (1)python pyinstaller打包exe添加版本信息(2)python获取exe版本信息(3)pyqt5开发exe添加检查版本更新功能