Linux系统编程 37 -makefile2个函数和clean

学习笔记
一个makefile 就是用一个个规则凑在一起

2个函数
wildcard
patsubst

wildcard 百搭牌,通配符
src = $(wildcard *.c)

$(wildcard *.c)表示函数调用
 wildcard        表示函数名
 *.c             表示函数的参数
 函数调用完以后的返回值交给src
 
 这个函数的作用可以把所有以.c文件 匹配上
 把文件名提取出来,作为一个列表赋值给src
 
  $(wildcard *.c) =  $(wildcard ./*.c):匹配当前目录下的所有.c文件  
  将文件名组成列表,赋值给变量src。
  
src=add.c sub.c div1.c

patsubst 匹配和替换

obj=$(patsubst %.c,%.o,$(src)):将参数3中,包含参数1的部分,替换为参数2.
obj=add.o sub.o div1.o

修改makefile 文件

$cat makefile
src=$(wildcard ./*.c) #add.c div1.c sub.c hello.c
obj=$(patsubst %.c,%.o,$(src)) #add.o div1.o sub.o hello.oALL:a.outa.out:$(obj)gcc $(obj) -o a.outhello.o:hello.cgcc -c hello.c -o hello.oadd.o:add.cgcc -c add.c -o add.osub.o:sub.cgcc -c sub.c -o sub.odiv1.o:div1.cgcc -c div1.c -o div1.o

make

$make
make: Nothing to be done for `ALL'.
$rm ./*.o
$make
gcc -c add.c -o add.o
gcc -c div1.c -o div1.o
gcc -c hello.c -o hello.o
gcc -c sub.c -o sub.o
gcc ./add.o ./div1.o ./hello.o ./sub.o  -o a.out
$./a.out
10+5 = 15
10-5 = 5
10/5 = 1

添加clean
在makefile 中添加:

clean:-rm -rf $(obj) a.out
$make clean
rm -rf ./add.o ./div1.o ./hello.o ./sub.o  a.out

注意:
$make clean -n
模拟执行一遍接下来要干的事情

$ls
add.c  a.out  div1.c  hello.c  m1        makefile.old  sub.o
add.o  div1.  div1.o  hello.o  makefile  sub.c
$make clean -n
rm -rf ./add.o ./div1.o ./hello.o ./sub.o  a.out
$ls
add.c  a.out  div1.c  hello.c  m1        makefile.old  sub.o
add.o  div1.  div1.o  hello.o  makefile  sub.c

1.clean规则没有依赖条件。
2.-rm:中的- 目的是删除没有的文件时候,也不会报错。
3.-rf:-r和-f合写,-r表示递归地处理文件,
    即处理该目录及其所有子目录下符合条件的文件;
    -f则是无提示强制删除

Linux系统编程 37 -makefile2个函数和clean相关推荐

  1. linux系统编程3—文件存储函数

    文章目录 1.innode 2.dentry 3.stat函数 4.lstat函数 5.access函数.chmod函数.truncate函数 6.link函数 7.unlink函数 unlink的特 ...

  2. Linux系统编程.NO7——目录操作函数

    5. 目录文件管理函数 5.1. 目录文件概念 目录在Linux中也是文件,也有对应的文件指针,每次读目录之前也要先打开目录,然后目录指针就出现了,第一次读就是第一个文件的信息,然后第二次读就是第二个 ...

  3. linux系统编程下的open函数使用方法

    目录 1.句柄(file descriptor 简称fd) 2.使用open前需要先包含头文件 3.参数说明 3.1 参数1(pathname) 3.2 参数2(flags) 3.3 参数3(mode ...

  4. linux系统编程3-read、lseek函数

    //read函数原型:ssize_t read(int fd, void *buf, size_t count); //lseek函数原型:off_t lseek(int fd, off_t offs ...

  5. Linux系统编程37:多线程之什么是临界区和临界资源以及如何使用mutex互斥锁

    文章目录 (1)临界区,临界资源和原子性问题 (2)互斥量(锁) A:互斥锁 B:锁的作用 C:互斥锁实现的原理 (3)可重入函数和线程安全 A:可重入函数和线程安全 B:常见的线程安全和不安全情况 ...

  6. 【README】Linux系统编程必读:本专栏内容提要以及系统调用接口总结

    文章目录 前言 第一部分:博客知识点 (1)基础篇 Linux系统编程1:Linux中使用率最高的一些命令 Linux系统编程2:详解Linux中的权限问题 Linux系统编程3:基础篇之详解Linu ...

  7. 嵌入式学习之linux系统编程----1 了解linux编程并且在ubuntu以及ARM上运行测试程序

    1.何为linux系统编程? linux系统编程也称为linux下的高级编程,它介于应用层与驱动层之间. 一般来说分为三个层面,分别是:应用层(写一个qt程序或者c程序就属于是应用层面).驱动层(比如 ...

  8. linux系统编程之文件与I/O(六):fcntl 函数与文件锁

    2013-05-14 11:26 8290人阅读 评论(2) 收藏 举报  分类: linux系统编程(19)  版权声明:本文为博主原创文章,未经博主允许不得转载. 一.fcntl函数 功能:操纵文 ...

  9. linux系统发送信号的系统调用是,linux系统编程之信号:信号发送函数sigqueue和信号安装函数sigaction...

    信号发送函数sigqueue和信号安装函数sigaction sigaction函数用于改变进程接收到特定信号后的行为. sigqueue()是比较新的发送信号系统调用,主要是针对实时信号提出的(当然 ...

最新文章

  1. r语言ggplot2一夜多图_ggplot2简介
  2. Typora添加右键新建Markdown文件
  3. Python 实现整数线性规划:分枝定界法(Branch and Bound)
  4. 编辑流程图_作为一名采购商,做不好采购?送你5套采购流程图模板
  5. 程序自我销毁(VB源代码)
  6. 洛谷P2670扫雷游戏题解
  7. 消息队列—简介以及使用场景
  8. ASP.NET Core on K8S学习初探(2)
  9. linux中设备文件和磁盘文件的区别,Linux下磁盘设备文件有哪些变化问题?
  10. 小米手机老板,雷军,肯定是假程序员
  11. MVC4 下DropDownList使用方法
  12. lightGBM用于排序(Learning to Rank )
  13. 关于java多线程堆和栈的共享问题
  14. 华为助力“沙漠奇迹”成为高密互联的高尔夫球场
  15. 人工智能语音训练数据的制作方式?
  16. 中兴捧月营销精英挑战赛回顾
  17. 共享个人整理的Python问题,有源码,分析过程,解决方案,还有时间戳做间隔
  18. CSDN产品公告第3期:博客数据统计功能上线,OFFER大挑战等你来!
  19. 化工计算机图形与数据处理知识内容王水,化工计算机数据与图形处理excel作图.ppt...
  20. ps导出gif+html,ps怎么导出gif格式的动图

热门文章

  1. Microsoft Excel 教程:如何在 Excel 中更改单元格的格式?
  2. 董明珠称“格力手机做得不比苹果差”哪里来的底气?
  3. 鲸品堂|WhaleDI消息队列稳定性提升实践
  4. Android8.1 ifw方案,Android8.1系统修改串口节点
  5. 分布式能源系统与热电联产
  6. HDMI的CEC功能
  7. clone和fork的区别linux,fork clone 和 fork 的区别
  8. Android稳定性测试资源汇总
  9. Seaborn函数总结
  10. 论中国青少年学习计算机编程的必要性