对于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)相关推荐

  1. 解析Makefile文件的构建规则

    2019独角兽企业重金招聘Python工程师标准>>> Makefile 编辑一个工程中的源文件不计其数,其按类型.功能.模块分别放在若干个目录中,makefile定义了一系列的规则 ...

  2. Makefile文件的编写规则

    欢迎大家关注笔者,你的关注是我持续更博的最大动力 Makefile文件编写规则 文章目录: 1 makefile文件介绍 2 makefile文件编写 1 makefile文件介绍 makefile是 ...

  3. makefile文件编写_九图记住Makefile

    本文首次编辑时间2020.07.20 最后编辑时间2020.08.03 欢迎转载,转载请附上原文链接 参考: GNU make说明文档:https://www.gnu.org/software/mak ...

  4. 认识Makefile文件(什么作用,格式怎样,如何工作)

    以下内容源于C语言中文网的学习与整理,非原创,如有侵权请告知删除. 参考博客:Make 命令教程 - 阮一峰的网络日志 一.Makefile文件是什么 Makefile 文件描述了 Linux 系统下 ...

  5. 很详细、很移动的Linux makefile教程:介绍,总述,书写规则,书写命令,使用变量,使用条件推断,使用函数,Make 的运行,隐含规则 使用make更新函数库文件 后序...

    很详细.很移动的Linux makefile 教程 内容如下: Makefile 介绍 Makefile 总述 书写规则 书写命令 使用变量 使用条件推断 使用函数 make 的运行 隐含规则 使用m ...

  6. makefile文件简要介绍

    到此为止,读者已经了解了如何在Linux下使用编辑器编写代码,如何使用Gcc把代码编译成可执行文件,还学习了如何使用Gdb来调试程序,那么,所有的工作看似已经完成了,为什么还需要Make这个工程管理器 ...

  7. Linux——Makefile文件

    Makefile/makefile Windows环境下IDE会自动帮你完成makefile文件的编写,Linux上我们需要自己编写. Makefile文件,我们可以将其理解为一个工程文件的编译规则, ...

  8. 构建makefile文件

    makefile文件入门 makefile文件的组成内容 makefile 文件主要有一下5种组成部分 显示规则:显示规则说明了生成一个或多个目标文件的发改发和步骤. 隐式规则:由于make工具有自动 ...

  9. linux--多目录下的MakeFile文件(嵌套Makefile)编写

    linux--多目录下的makefile文件(嵌套Makefile)编写 1 简介 2 规则 2.1 简介 2.1.1 Makefile 主要的 5个部分 (显示规则, 隐晦规则, 变量定义, 文件指 ...

最新文章

  1. Asp.Net 动态生成验证码
  2. 解决Win8.1键盘输入后鼠标左键响应延迟的问题
  3. 图的存储结构与操作--C语言实现
  4. python xmxl 无法启动_/usr/bin/python: can't decompress data; zlib not available 的异常处理
  5. 服务器不显示内存条,服务器主机检测不到内存条
  6. oracle主从表分离怎么实时更新数据_高可用数据库主从复制延时的解决方案
  7. 回归树与基于规则的模型(part3)--回归模型树
  8. Python从键盘输入多行文本数据的方法
  9. Linux 索引节点 inode
  10. Qt5.x解决报错main.cpp:1:10: fatal error: QApplication: No such file or directory问题
  11. Android SDK Tools Platform-tools Build-tools
  12. 手机中SN、MEID、IMEI的意思
  13. 用Python Matplotlib实现可视化混沌系统
  14. 如何解决apt-get中Unmet dependencies问题
  15. Java序列中如果有些字段不想被序列化,怎么办
  16. glusterfs 文件服务器 搭建
  17. Linux文件管理初探---学习文件管理,我想你必须要知道的目录
  18. 服务器储存要注意什么
  19. Linux 指令:怎样从文件中找到重复行?
  20. codeforce 3B. Lorry(贪心)

热门文章

  1. fortran语法笔记
  2. mysql数据库version版本控制_MySQL数据库版本控制
  3. html如何让字体自动变色,CSS使文字部分变色
  4. mysql加锁语法_MySql 加锁问题
  5. 视网膜脱离oct报告图_刚刚,爱尔眼科发布关于艾芬医生诊疗过程的核查报告
  6. pygame里面物体闪烁运动_利用自闪烁发光二极管探究小车在倾斜轨道上的运动规律...
  7. 洛克人红色思考型机器人叫什么_稻船敬二新企划《红色灰烬》 依然是机器人风格...
  8. php socketconnect连接失败_PHP设计模式之模板方法模式
  9. 一个程序员的爱情表白书
  10. LeetCode 513. 找树左下角的值 思考分析