Linux系统编程 37 -makefile2个函数和clean
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相关推荐
- linux系统编程3—文件存储函数
文章目录 1.innode 2.dentry 3.stat函数 4.lstat函数 5.access函数.chmod函数.truncate函数 6.link函数 7.unlink函数 unlink的特 ...
- Linux系统编程.NO7——目录操作函数
5. 目录文件管理函数 5.1. 目录文件概念 目录在Linux中也是文件,也有对应的文件指针,每次读目录之前也要先打开目录,然后目录指针就出现了,第一次读就是第一个文件的信息,然后第二次读就是第二个 ...
- linux系统编程下的open函数使用方法
目录 1.句柄(file descriptor 简称fd) 2.使用open前需要先包含头文件 3.参数说明 3.1 参数1(pathname) 3.2 参数2(flags) 3.3 参数3(mode ...
- linux系统编程3-read、lseek函数
//read函数原型:ssize_t read(int fd, void *buf, size_t count); //lseek函数原型:off_t lseek(int fd, off_t offs ...
- Linux系统编程37:多线程之什么是临界区和临界资源以及如何使用mutex互斥锁
文章目录 (1)临界区,临界资源和原子性问题 (2)互斥量(锁) A:互斥锁 B:锁的作用 C:互斥锁实现的原理 (3)可重入函数和线程安全 A:可重入函数和线程安全 B:常见的线程安全和不安全情况 ...
- 【README】Linux系统编程必读:本专栏内容提要以及系统调用接口总结
文章目录 前言 第一部分:博客知识点 (1)基础篇 Linux系统编程1:Linux中使用率最高的一些命令 Linux系统编程2:详解Linux中的权限问题 Linux系统编程3:基础篇之详解Linu ...
- 嵌入式学习之linux系统编程----1 了解linux编程并且在ubuntu以及ARM上运行测试程序
1.何为linux系统编程? linux系统编程也称为linux下的高级编程,它介于应用层与驱动层之间. 一般来说分为三个层面,分别是:应用层(写一个qt程序或者c程序就属于是应用层面).驱动层(比如 ...
- linux系统编程之文件与I/O(六):fcntl 函数与文件锁
2013-05-14 11:26 8290人阅读 评论(2) 收藏 举报 分类: linux系统编程(19) 版权声明:本文为博主原创文章,未经博主允许不得转载. 一.fcntl函数 功能:操纵文 ...
- linux系统发送信号的系统调用是,linux系统编程之信号:信号发送函数sigqueue和信号安装函数sigaction...
信号发送函数sigqueue和信号安装函数sigaction sigaction函数用于改变进程接收到特定信号后的行为. sigqueue()是比较新的发送信号系统调用,主要是针对实时信号提出的(当然 ...
最新文章
- r语言ggplot2一夜多图_ggplot2简介
- Typora添加右键新建Markdown文件
- Python 实现整数线性规划:分枝定界法(Branch and Bound)
- 编辑流程图_作为一名采购商,做不好采购?送你5套采购流程图模板
- 程序自我销毁(VB源代码)
- 洛谷P2670扫雷游戏题解
- 消息队列—简介以及使用场景
- ASP.NET Core on K8S学习初探(2)
- linux中设备文件和磁盘文件的区别,Linux下磁盘设备文件有哪些变化问题?
- 小米手机老板,雷军,肯定是假程序员
- MVC4 下DropDownList使用方法
- lightGBM用于排序(Learning to Rank )
- 关于java多线程堆和栈的共享问题
- 华为助力“沙漠奇迹”成为高密互联的高尔夫球场
- 人工智能语音训练数据的制作方式?
- 中兴捧月营销精英挑战赛回顾
- 共享个人整理的Python问题,有源码,分析过程,解决方案,还有时间戳做间隔
- CSDN产品公告第3期:博客数据统计功能上线,OFFER大挑战等你来!
- 化工计算机图形与数据处理知识内容王水,化工计算机数据与图形处理excel作图.ppt...
- ps导出gif+html,ps怎么导出gif格式的动图