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系统之上的, ...
随机推荐
- 【XSY1591】卡片游戏 DP
题目描述 有标有数字为\(1\)~\(9\)的卡片各\(a_1,a_2\cdots a_9\)张,还有标有乘号的卡片\(m\)张.从中取出\(n\)张按任意顺序排列,取出两个乘号相邻和乘法在边界上的非 ...
- CODEFORCES掉RATING记 #4
比赛:Codeforces Round #427 (Div. 2) 时间:2017.7.31晚 开场发现有6道题,都是水题(可能我只会做水题) A:比较\(2t_1+sv_1\)与\(2t_2+sv_ ...
- 安装 xadmin 报错: Command "python setup.py egg_info" failed with error code 1 in C:\Users\Python\AppData\Local\Temp\pip-install-1k1byg0p\xadmin\
报错详情 安装 xadmin 组件的时候报错 不论是命令行还是 pycharm 方式都不行 分析报错 按照报错提示是说 README.rst 文件的编码问题导致. 解决报错 通过 github 下载源 ...
- IntelliJ IDEA快捷键总结
原文: IntelliJ IDEA快捷键 下面只列出Windows系统下的快捷键,Mac下的快捷键参考上面的链接. Remember these Shortcuts 功能 快捷键 Smart code ...
- 【WC2018】通道(边分治,虚树,动态规划)
[WC2018]通道(边分治,虚树,动态规划) 题面 UOJ 洛谷 题解 既然是三棵树,那么显然就是找点什么东西来套个三层. 一棵树怎么做?入门dp. 两棵树?假设在第一棵树中的深度为\(dep\). ...
- linux rpm安装 failed depenencie(失败的依赖关系)错误原因
rpm安装nfs 出现failed depenencie 经查资料得知命令后加上--nodeps --force,就可以了 加上那两个参数的意义就在于,安装时不再分析包之间的依赖关系而直接安装,也就不 ...
- IT项目管理——《人月神话》读后感
这也许是和候红老师的最后的几节课了吧,侯老师是一个很有思想深度,很关心同学的好老师. 一开学就布置了阅读<人月神话>的作业,说实话,我没有看,以我的速度可能2.3个小时就看完了,但是我觉得 ...
- VSCode and NoteBook for JavaScript | NodeJS
VSCode调试HTML环境配置 | Jupyter NoteBook IJavaScript 配置 VSCode调试HTML环境配置 先安装两个插件:Debugger for Chrome(调试) ...
- Linux安装Gitlab,附iSCSI分区挂载说明
因为Gitlab数据要存放在共享存储,所以本次配置的重头戏倒变成了挂载ISCSI了. OS:CentOS 7.2IP:172.16.1.191/192.168.2.191 iSCSI分Target(服 ...
- bzoj2553 禁忌
题目链接 题意 给出一个\(n\)个字符串的字典.对于一个字符串,他的贡献是这个字符串中最多的在字典中出现的不重叠子串的数量. 然后问一个长度为\(len\)的,字符集为前\(alphabet\)个字 ...