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基础的更多相关文章

  1. Linux就该这样学--之常用linux命令及bash基础

    Linux就该这样学--之常用linux命令及bash基础 Linux命令 管道 重定向 环境变量 常用命令 常用系统工作命令 系统状态检测命令 工作目录切换命令 文本文件编辑命令 文件目录管理命令 ...

  2. linux命令格式及基础命令(一)

    linux命令格式 ~]#COMMAND [选项] [参数] 例如: ~]#ls 不带任何选项和参数 ``` stylus ~]#ls -lh /etc 列出/etc下所有文件和目录,同时要求以格式和 ...

  3. Linux命令补充及基础优化。

    1.用户部分 1.1 创建新用户 涉及命令 useradd [root@oldboyedu-50 ~]# useradd oldboy #添加用户 oldboy 1.2 设置密码 [root@oldb ...

  4. Linux命令之Nano基础指南

    Nano基础指南 1.  Nano基础 目的 这是篇nano简明使用指南,帮助你快速了解nano的基本用法.如想获取更多的帮助信息,请参阅: http://www.nano-editor.org 打开 ...

  5. 嵌入式开发应该掌握的一些Linux命令

    Linux提供了大量的命令,利用它可以有效地完成大量的工作,如磁盘操作.文件存取.目录操作.进程管理.文件权限设定等.所以,在Linux系统上工作离不开使用系统提供的命令.要想真正理解Linux系统, ...

  6. 03_Linux基础-文件类型-主辅提示符-第1提示符-Linux命令-内外部命令-快捷键-改为英文编码-3个时间-stat-其他基础命令

    03_Linux基础-文件类型-主辅提示符-第1提示符-Linux命令-内外部命令-快捷键-改为英文编码-3个时间-stat-{1..100}-du-cd-cp-file-mv-echo-id-she ...

  7. Linux实战教学笔记04:Linux命令基础

    第四节:Linux命令基础 标签(空格分隔):Linux实战教学笔记 第1章 认识操作环境 root:当前登陆的用户名 @分隔符 chensiqi:主机名 -:当前路径位置 用户的提示符 1.1 Li ...

  8. Linux命令工具基础04 磁盘管理

    Linux命令工具基础04 磁盘管理 日程磁盘管理中,我们最常用的有查看当前磁盘使用情况,查看当前目录所占大小,以及打包压缩与解压缩: 查看磁盘空间 查看磁盘空间利用大小 df -h -h: huma ...

  9. 罗列Linux发行版的基础目录名称,命令法则和功能

    罗列Linux发行版的基础目录名称命名法则及功用规定 目录描述 /主层次 的根,也是整个文件系统层次结构的根目录 /bin存放在单用户模式可用的必要命令二进制文件,所有用户都可用,如 cat.ls.c ...

  10. SLAM+语音机器人DIY系列:(一)Linux基础——3.Linux命令行基础操作

    摘要 由于机器人SLAM.自动导航.语音交互这一系列算法都在机器人操作系统ROS中有很好的支持,所以后续的章节中都会使用ROS来组织构建代码:而ROS又是安装在Linux发行版ubuntu系统之上的, ...

随机推荐

  1. 【XSY1596】旅行 期望DP

    题目大意 有\(m\)个游客, 他们都依次访问城市\(1,2,3,\ldots,n\), 第\(i\)个游客到达任意一个城市后有\(p_i\)的概率会停下, 不再继续前行 设\(c_i\)个乘客经过了 ...

  2. 【BZOJ4331】[JSOI2012]越狱老虎桥(Tarjan)

    [BZOJ4331][JSOI2012]越狱老虎桥(Tarjan) 题面 BZOJ 然而BZOJ是权限题QwQ 洛谷 题解 先求出所有割边,那么显然要割掉一条割边. 如果要加入一条边,那么显然是把若干 ...

  3. 每天一个Linux命令(03):du命令

    du命令 今天找开发定位问题,看到他使用了这个命令,查看文件,之前知道df,所以今天的每天系列把这命令 du命令也是查看使用空间的,但是与df命令不同的是Linux du命令是对文件和目录磁盘使用的空 ...

  4. bzoj2555(后缀自动机+LCT)

    题目描述 (1):在当前字符串的后面插入一个字符串 (2):询问字符串s在当前字符串中出现了几次?(作为连续子串) 你必须在线支持这些操作. 题解 做法很自然,建出后缀自动机,维护每个节点的right ...

  5. Mysql 允许远程连接

    授权的方式允许任何主机访问mysql服务器: mysql>GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'password' W ...

  6. HDU5758 Explorer Bo 思维+树形dp

    题意自己看题目吧,挺短的. 思考过程:昨天感觉一天不做题很对不起自己,于是晚上跑到实验室打开别人树形dp的博客做了上面最后一个HDU的题,也是个多校题..一开始没有头绪了很久,因为起点不固定,所以这1 ...

  7. 从密码到token, 一个授权的故事 auth2.0

    1 美好的旧时光 我经常怀念三十年前那美好的旧时光, 工作很轻松, 生活很悠闲. 上班的时候偶尔有些HTTP的请求发到我这里, 我简单的看一下, 取出相对应的html文档,图片,发回去就可以了, 然后 ...

  8. 第三十七篇-BottomNavigationVIew底部导航的使用

    效果图: 添加底部导航和viewpaper 设置底部导航在底部 app:layout_constraintBottom_toBottomOf="parent" 新建四个fragme ...

  9. argparse模块的应用

    主要参照博客https://www.cnblogs.com/lindaxin/p/7975697.html http://wiki.jikexueyuan.com/project/explore-py ...

  10. java中异常的面试

    https://blog.csdn.net/qq_36523638/article/details/79363652 1) Java中的检查型异常和非检查型异常有什么区别? 这又是一个非常流行的Jav ...