makefile文件的书写规则(make和makefile)
对于makefile,掌握一个规则,两个变量和三个函数。下面介绍一个规则。
makefile的作用:一个项目代码的管理工具。当一个项目的代码文件数(如.c文件)太多,用gcc编译会太麻烦,如果全部文件一次性编译,一个文件有错误,所有文件都需要重新编译。如果每个文件单独编译,则十分麻烦。因此,就有项目代码管理工具makefile。项目代码编译管理;节省编译项目的时间;一次编写,终身受益。
[root@localhost src]# ls
add.c div.c libM1.so main.c mul.c sub.c
[root@localhost src]# gcc -pedantic -Wall -pipe -ggdb3 *.c -o zsx -I ../include/
[root@localhost src]# ls
add.c div.c libM1.so main.c mul.c sub.c zsx //可以看出最终只是生成了zsx目标文件,因此有一个.c文件改变了,就会全部重新编译,然后链接。
[root@localhost src]# ./zsx
sum = 26
规则如下:
规则中的三要素:目标,依赖,命令
目标:依赖条件
命令 //tab缩进,必须要缩进
[root@localhost src]# ls
add.c div.c libM1.so main.c mul.c sub.c
[root@localhost src]# vim makefile
zsx:main.c sub.c add.c mul.c div.c
gcc -pipe -pedantic -Wall -ggdb3 main.c sub.c add.c mul.c div.c -o zsx -I ../include //第二行必须有一个tab缩进
[root@localhost src]# make
gcc -pipe -pedantic -Wall -ggdb3 main.c sub.c add.c mul.c div.c -o zsx -I ../include
[root@localhost src]# ls
add.c div.c libM1.so main.c makefile mul.c sub.c zsx
[root@localhost src]# ./zsx
sum = 26
//上述中,生成的最终文件zsx自动会跟makefile文件在同一个目录。注意两点:1.对于依赖条件中的几个文件如果不跟makefile在同一个目录的话,必须指定其所在目录(如../main.c、/mnt/hgfs/shared/ggc/Calc/add.c等),这样makefile才能找到依赖条件所需的文件在哪里;2.在命令中,要分析清楚该命令是否需要指出头文件、库文件(-I -L -static -l)。
举例:
[root@localhost src]# ls
add.c div.c libM1.so main.c makefile mul.c sub.c
[root@localhost src]# vim makefile
zsx:main.o add.o sub.o mul.o div.o
gcc -ggdb3 main.o add.o sub.o mul.o div.o -o zsx
main.o:main.c
gcc -pedantic -Wall -pipe -c main.c -o main.o -I ../include
add.o:add.c
gcc -pedantic -Wall -pipe -c add.c -o add.o
sub.o:sub.c
gcc -pedantic -Wall -pipe -c sub.c -o sub.o
mul.o:mul.c
gcc -pedantic -Wall -pipe -c mul.c -o mul.o
div.o:div.c
gcc -pedantic -Wall -pipe -c div.c -o div.o
[root@localhost src]# make
gcc -pedantic -Wall -pipe -c main.c -o main.o -I ../include //生成main.o
gcc -pedantic -Wall -pipe -c add.c -o add.o //生成add.o
gcc -pedantic -Wall -pipe -c sub.c -o sub.o //生成sub.o
gcc -pedantic -Wall -pipe -c mul.c -o mul.o //生成mul.o
gcc -pedantic -Wall -pipe -c div.c -o div.o //生成div.o
gcc -ggdb3 main.o add.o sub.o mul.o div.o -o zsx //生成最终目标 且最后链接时加上调试信息 -ggdb3
[root@localhost src]# ./zsx
sum = 26
[root@localhost src]# ls
add.c add.o div.c div.o libM1.so main.c main.o makefile mul.c mul.o sub.c sub.o zsx //可以看出,既生成了以及中间文件.o,还生成了最终目标文件zsx。因为几个中间文件.o在makefile中也是目标文件,为次级目标文件。
[root@localhost src]# make
make: `zsx' is up to date. //可以发现再次make没有反应,这是因为make检测到所有的文件都是最新的(即没有改动过),因此不需要再次做重复的工作。
[root@localhost src]# rm -f zsx
[root@localhost src]# make
gcc -ggdb3 main.o add.o sub.o mul.o div.o -o zsx //此时make有了反应,因为make检测到zsx目标文件删除了,因此只需要执行最后一步链接操作即可。
[root@localhost src]# ./zsx
sum = 26
[root@localhost src]# vim add.c //修改了add.c的内容
[root@localhost src]# make
gcc -pedantic -Wall -pipe -c add.c -o add.o //只是重新编译了add.c,编译很费时间
gcc -ggdb3 main.o add.o sub.o mul.o div.o -o zsx //更新最终目标, 链接不费时间
//最终目标一定要写在第一行,如果未写在第一行,则需要:all:zsx --> all指定生成的最终目标为zsx
总结:
makefile文件的书写规则(make和makefile)相关推荐
- 解析Makefile文件的构建规则
2019独角兽企业重金招聘Python工程师标准>>> Makefile 编辑一个工程中的源文件不计其数,其按类型.功能.模块分别放在若干个目录中,makefile定义了一系列的规则 ...
- Makefile文件的编写规则
欢迎大家关注笔者,你的关注是我持续更博的最大动力 Makefile文件编写规则 文章目录: 1 makefile文件介绍 2 makefile文件编写 1 makefile文件介绍 makefile是 ...
- makefile文件编写_九图记住Makefile
本文首次编辑时间2020.07.20 最后编辑时间2020.08.03 欢迎转载,转载请附上原文链接 参考: GNU make说明文档:https://www.gnu.org/software/mak ...
- 认识Makefile文件(什么作用,格式怎样,如何工作)
以下内容源于C语言中文网的学习与整理,非原创,如有侵权请告知删除. 参考博客:Make 命令教程 - 阮一峰的网络日志 一.Makefile文件是什么 Makefile 文件描述了 Linux 系统下 ...
- 很详细、很移动的Linux makefile教程:介绍,总述,书写规则,书写命令,使用变量,使用条件推断,使用函数,Make 的运行,隐含规则 使用make更新函数库文件 后序...
很详细.很移动的Linux makefile 教程 内容如下: Makefile 介绍 Makefile 总述 书写规则 书写命令 使用变量 使用条件推断 使用函数 make 的运行 隐含规则 使用m ...
- makefile文件简要介绍
到此为止,读者已经了解了如何在Linux下使用编辑器编写代码,如何使用Gcc把代码编译成可执行文件,还学习了如何使用Gdb来调试程序,那么,所有的工作看似已经完成了,为什么还需要Make这个工程管理器 ...
- Linux——Makefile文件
Makefile/makefile Windows环境下IDE会自动帮你完成makefile文件的编写,Linux上我们需要自己编写. Makefile文件,我们可以将其理解为一个工程文件的编译规则, ...
- 构建makefile文件
makefile文件入门 makefile文件的组成内容 makefile 文件主要有一下5种组成部分 显示规则:显示规则说明了生成一个或多个目标文件的发改发和步骤. 隐式规则:由于make工具有自动 ...
- linux--多目录下的MakeFile文件(嵌套Makefile)编写
linux--多目录下的makefile文件(嵌套Makefile)编写 1 简介 2 规则 2.1 简介 2.1.1 Makefile 主要的 5个部分 (显示规则, 隐晦规则, 变量定义, 文件指 ...
最新文章
- Asp.Net 动态生成验证码
- 解决Win8.1键盘输入后鼠标左键响应延迟的问题
- 图的存储结构与操作--C语言实现
- python xmxl 无法启动_/usr/bin/python: can't decompress data; zlib not available 的异常处理
- 服务器不显示内存条,服务器主机检测不到内存条
- oracle主从表分离怎么实时更新数据_高可用数据库主从复制延时的解决方案
- 回归树与基于规则的模型(part3)--回归模型树
- Python从键盘输入多行文本数据的方法
- Linux 索引节点 inode
- Qt5.x解决报错main.cpp:1:10: fatal error: QApplication: No such file or directory问题
- Android SDK Tools Platform-tools Build-tools
- 手机中SN、MEID、IMEI的意思
- 用Python Matplotlib实现可视化混沌系统
- 如何解决apt-get中Unmet dependencies问题
- Java序列中如果有些字段不想被序列化,怎么办
- glusterfs 文件服务器 搭建
- Linux文件管理初探---学习文件管理,我想你必须要知道的目录
- 服务器储存要注意什么
- Linux 指令:怎样从文件中找到重复行?
- codeforce 3B. Lorry(贪心)
热门文章
- fortran语法笔记
- mysql数据库version版本控制_MySQL数据库版本控制
- html如何让字体自动变色,CSS使文字部分变色
- mysql加锁语法_MySql 加锁问题
- 视网膜脱离oct报告图_刚刚,爱尔眼科发布关于艾芬医生诊疗过程的核查报告
- pygame里面物体闪烁运动_利用自闪烁发光二极管探究小车在倾斜轨道上的运动规律...
- 洛克人红色思考型机器人叫什么_稻船敬二新企划《红色灰烬》 依然是机器人风格...
- php socketconnect连接失败_PHP设计模式之模板方法模式
- 一个程序员的爱情表白书
- LeetCode 513. 找树左下角的值 思考分析