Linux命令(十三)make_makefile基础
1. 好处
一次编写,终身受益
2. 命名规则
makefile
Makefile
3. 三要素
目标
依赖
规则命令
4. 第一版makefile
目标:依赖
tab键 规则命令
makefile:


5. 第二版makefile
第一版更改其中一个文件,所有源码都重新编译
5.1 改进
- 可以考虑编译过程分解,先生成 .o 文件,然后使用 .o 文件变成结果



5.2 定义变量


Makefile隐含规则:默认处理第一个目标
5.3 函数
wildcard:可以进行 文件匹配
patsubst:内容的替换
# get all .c file
SrcFiles=$(wildcard *.c) # ObjFiles 定义目标文件
ObjFiles=main.o add.o minu.o mul.o # 目标文件用法
app.out:$(ObjFiles)
gcc -o app.out -I./include *.o main.o:main.c
gcc -c main.c -I ./include add.o:add.c
gcc -c add.c -I ./include minu.o:minu.c
gcc -c minu.c -I ./include mul.o:mul.c
gcc -c mul.c -I ./include test:
echo $(SrcFiles)

5.4 makefile变量
$@: 代表 目标
$^ : 代表全部 依赖
$< : 第一个依赖
$? : 第一个变化的依赖
# get all .c file
SrcFiles=$(wildcard *.c) # all .c files ---> .o files
ObjFiles1=$(patsubst %.c,%.o,$(SrcFiles)) # 目标文件用法
app.out:$(ObjFiles1)
gcc -o app.out -I./include $(ObjFiles1) %.o:%.c
gcc -c $< -I ./include
test:
echo $(SrcFiles)
echo $(ObjFiles1)

5.5 添加清理功能(@在规则前作用)
# get all .c file
SrcFiles=$(wildcard *.c) # all .c files ---> .o files
ObjFiles1=$(patsubst %.c,%.o,$(SrcFiles)) # 目标文件用法
app.out:$(ObjFiles1)
gcc -o app.out -I./include $(ObjFiles1) # 模式匹配规则, $@,$<这样的变量,只能在规则中出现
%.o:%.c
gcc -c $< -I ./include -o $@ test:
echo $(SrcFiles)
echo $(ObjFiles1) # 添加清理功能
clean:
@rm -f *.o # 加 @表示指令不输出
rm -f app.out
5.6 “-”的作用
该条规则报错,仍然继续执行


5.7 防止有歧义, 定义伪目标
.PHONY:clean # clean是一个伪目标,不是真正要得到的目标

5.8 总结
# get all .c file
SrcFiles=$(wildcard *.c) # all .c files ---> .o files
ObjFiles1=$(patsubst %.c,%.o,$(SrcFiles)) all:app.out # 目标文件用法 $@: 目标;$<: 依赖
app.out:$(ObjFiles1)
gcc -o $@ -I./include $(ObjFiles1) app.out1:$(ObjFiles1)
gcc -o $@ -I./include $(ObjFuiles1) # 模式匹配规则, $@,$<这样的变量,只能在规则中出现
%.o:%.c
gcc -c $< -I ./include -o $@ test:
echo $(SrcFiles)
echo $(ObjFiles1) # 定义伪目标,防止有歧义
.PHONY:clean # 添加清理功能
clean:
-@rm -f *.o # 加 @表示指令不输出
rm -f app.out
make -f xxx:指定文件
Linux命令(十三)make_makefile基础的更多相关文章
- Linux就该这样学--之常用linux命令及bash基础
Linux就该这样学--之常用linux命令及bash基础 Linux命令 管道 重定向 环境变量 常用命令 常用系统工作命令 系统状态检测命令 工作目录切换命令 文本文件编辑命令 文件目录管理命令 ...
- linux命令格式及基础命令(一)
linux命令格式 ~]#COMMAND [选项] [参数] 例如: ~]#ls 不带任何选项和参数 ``` stylus ~]#ls -lh /etc 列出/etc下所有文件和目录,同时要求以格式和 ...
- Linux命令补充及基础优化。
1.用户部分 1.1 创建新用户 涉及命令 useradd [root@oldboyedu-50 ~]# useradd oldboy #添加用户 oldboy 1.2 设置密码 [root@oldb ...
- Linux命令之Nano基础指南
Nano基础指南 1. Nano基础 目的 这是篇nano简明使用指南,帮助你快速了解nano的基本用法.如想获取更多的帮助信息,请参阅: http://www.nano-editor.org 打开 ...
- 嵌入式开发应该掌握的一些Linux命令
Linux提供了大量的命令,利用它可以有效地完成大量的工作,如磁盘操作.文件存取.目录操作.进程管理.文件权限设定等.所以,在Linux系统上工作离不开使用系统提供的命令.要想真正理解Linux系统, ...
- 03_Linux基础-文件类型-主辅提示符-第1提示符-Linux命令-内外部命令-快捷键-改为英文编码-3个时间-stat-其他基础命令
03_Linux基础-文件类型-主辅提示符-第1提示符-Linux命令-内外部命令-快捷键-改为英文编码-3个时间-stat-{1..100}-du-cd-cp-file-mv-echo-id-she ...
- Linux实战教学笔记04:Linux命令基础
第四节:Linux命令基础 标签(空格分隔):Linux实战教学笔记 第1章 认识操作环境 root:当前登陆的用户名 @分隔符 chensiqi:主机名 -:当前路径位置 用户的提示符 1.1 Li ...
- Linux命令工具基础04 磁盘管理
Linux命令工具基础04 磁盘管理 日程磁盘管理中,我们最常用的有查看当前磁盘使用情况,查看当前目录所占大小,以及打包压缩与解压缩: 查看磁盘空间 查看磁盘空间利用大小 df -h -h: huma ...
- 罗列Linux发行版的基础目录名称,命令法则和功能
罗列Linux发行版的基础目录名称命名法则及功用规定 目录描述 /主层次 的根,也是整个文件系统层次结构的根目录 /bin存放在单用户模式可用的必要命令二进制文件,所有用户都可用,如 cat.ls.c ...
- SLAM+语音机器人DIY系列:(一)Linux基础——3.Linux命令行基础操作
摘要 由于机器人SLAM.自动导航.语音交互这一系列算法都在机器人操作系统ROS中有很好的支持,所以后续的章节中都会使用ROS来组织构建代码:而ROS又是安装在Linux发行版ubuntu系统之上的, ...
随机推荐
- 华为Python 算法面试题
华为算法面试题 """ 算法题: 提供一个序列,完成对这个序列的分割.要求分割后的两个序列彼此差值最小 实现函数,返回两个序列 """ de ...
- WINDOWS 包管理器 Chocolatey
https://chocolatey.org/ - 官网 安装: @"%SystemRoot%\System32\WindowsPowerShell\v1.0\powershell.exe& ...
- crontab 任务带日期输出
date命令用法#带格式输出$ date +"%Y-%m-%d"#输出1天后的日期$ date -d "1 day" +"%Y-%m-%d" ...
- linux deb系 rpm系 配置路由
deb: 添加默认路由:route add default gw 8.46.192.1 添加网段路由:route add -net 8.46.0.0/19 gw 8.46.192.1 删除路由:把 a ...
- 通俗易懂的来理解Iaas,Paas,SaaS
首先我们先来了解一下这几个单词的意思和完全的英文 Iaas:Infrastructure as a service 基础设施即服务 Paas:Platform as a service 平台 ...
- 普及一个Linux的小技能~Ctrl+Z切换到后台运行
逆天Linux一直是自己摸索的,几年下来也小有心得,前不久PC也换成Ubuntu了,但毕竟不是专门搞运维的,有些知识还是有死角 这不,今天发现了个小技巧,来和大家分享一下: 比如运行一个交互式的程序: ...
- Python3 与 C# 扩展之~模块专栏
代码裤子:https://github.com/lotapp/BaseCode/tree/maste 在线编程:https://mybinder.org/v2/gh/lotapp/BaseCode ...
- jsp (1)
一.jsp介绍: jsp是servlet的一种包装.是html+js+css+servlet. jsp文件无需配置,如果修改了jsp文件不需要reload应用. jsp访问方法:直接访问文件名.jsp ...
- 跟我一起用node-express搭建一个小项目(mongodb)[二]
我的小项目主要是会用到MongoDB. 呵呵,我也是现学现卖. 都说小公司十八般武艺样样稀疏,没有办法啊! 兵来兵挡,将来将挡!自己是个兵呢?还是一个将呢! 没有公司培养,就自己培养自己呗.差的远一点 ...
- Nginx快捷启动配置
Linux下Nginx开关服务,正常方式是这样({nginx}-为Nginx安装路径): {nginx}/sbin/nginx #启动 {nginx}/sbin/nginx -s stop #停止 这 ...