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系统之上的, ...
随机推荐
- day2 网络基础
网路基础 网络OSI模型七层: 物理层: 定义特性:机械,电器,功能,过程: 定义接口标准:双绞线,光纤,同轴电缆: 相关协议:无: 数据链路层: 定义帧的开始结束,封装成帧,差错校验,透明传输(防止 ...
- XAMPP Access forbidden! Error 403,You don't have permission to access the requested directory
xampp 无论在window 还是在 Mac 如出现以下错误的:通常的解决方式: 具体配置教程可以任意查相关资料既可,(配置子站子大致流程如:开启httpd.conf的inc...httpd-vho ...
- Android stadio 生成项目 Plugin with id 'com.android.application' not found
buildscript { repositories { jcenter() } dependencies { classpath 'com.android.tools.build:gradle:2. ...
- 平衡树splay学习笔记#2
讲一下另外的所有操作(指的是普通平衡树中的其他操作) 前一篇的学习笔记连接:[传送门],结尾会带上完整的代码. 操作1,pushup操作 之前学习过线段树,都知道子节点的信息需要更新到父亲节点上. 因 ...
- css文本设置
常用的应用文本的css样式: color 设置文字的颜色,如: color:red; font-size 设置文字的大小,如:font-size:12px; font-family 设置文字的字体,如 ...
- 「SCOI2015」小凸想跑步 解题报告
「SCOI2015」小凸想跑步 最开始以为和多边形的重心有关,后来发现多边形的重心没啥好玩的性质 实际上你把面积小于的不等式列出来,发现是一次的,那么就可以半平面交了 Code: #include & ...
- POJ--3259 Wormholes (SPFA判负环)
题目电波 3259 Wormholes #include<iostream> #include<cstring> #include<algorithm> #in ...
- 【洛谷 P1616 疯狂的采药】
题目背景 此题为NOIP2005普及组第三题的疯狂版. 此题为纪念LiYuxiang而生. 题目描述 LiYuxiang是个天资聪颖的孩子,他的梦想是成为世界上最伟大的医师.为此,他想拜附近最有威望的 ...
- touch-paint
效果如下 代码如下: //index.html <!DOCTYPE html> <html lang="zh-CN"> <head> <m ...
- 关于Jedis是否线程安全的测试
转: 关于Jedis是否线程安全的测试 2018年09月20日 15:53:51 cwz_茶仔 阅读数:659 版权声明:转载请注明出处 https://blog.csdn.net/jk94043 ...