shell脚本编程Makefile的使用

 更新时间:2022年03月09日 09:14:28   作者:CAccept  
本文主要介绍了shell脚本编程Makefile的使用,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

为什么要使用Makefile

简单来说,当我们写一个稍微大一些项目的时候,如果我们要执行一个程序那得编译很多个文件并且还得链接起来,如果没有Makefile我们就得一个一个编译一个一个链接那真的是又臭又长(而且还会经常写错),而Makefile就能够很好的解决这个问题,所以说掌握好Makefile的编写是很有必要的

Makefile的编写

程序的编译和链接

使用C、C++编写可执行程序,首先要把源文件编译成中间代码文件,Linux下是 .o 文件,即 Object File,这个动作叫做编译(compile)。然后再把大量的Object File合成执行文件,这个动作叫作链接(link)。

一个项目,拥有成百上千的源程序文件,编译链接这些源文件都是由规则的,Makefile闪亮登场!Makefile确定整个工程的编译规则,只需要一个make命令,就可以实现“自动化编译”。make是一个解释makefile中指令的命令工具,一般来说,大多数的IDE都有这个命令,比如:Delphi的make,Visual C++的nmake,Linux下GNU的make。

Make 工作原理

通常在一个项目里,我们的规则是:
1)如果这个工程没有编译过,那么我们的所有C文件都要编译并被链接。
2)如果这个工程的某几个C文件被修改,那么我们只编译被修改的C文件,并链接目标程序。
3)如果这个工程的头文件被改变了,那么我们需要编译引用了这几个头文件的C文件,并链接目标程序。

其实就是智能的识别哪些编译链接需要做,哪些不用做避免不必要的时间消耗

只要我们的Makefile写得够好,我们只用一个make命令就可以完成,make命令会自动智能地根据当前的文件修改的情况来确定哪些文件需要重编译,从而自己编译所需要的文件和链接目标程序。

Makefile的规则

target … : prerequisites …

command

target:也就是一个目标文件,可以是ObjectFile,也可以是执行文件。还可以是一个标签(Label),对于标签这种特性,暂不叙述。

prerequisites:要生成那个target所需要的文件或是目标。

command:也就是make需要执行的命令。(任意的Shell命令)

这是一个文件的依赖关系,也就是说,target这一个或多个的目标文件依赖于prerequisites中的文件,其生成规则定义在command中。说白一点就是说,prerequisites中如果有一个以上的文件比target文件要新的话,command所定义的命令就会被执行。这就是Makefile的规则。也就是Makefile中最核心的内容。

一个范例:

hello_demo : hellospeak.o speak.o   //由hellospeak.o speak.o链接成目标hello_demo                                  
        gcc -o hello_demo hellospeak.o speak.o  //执行下面的命令                               

hellospeak.o : hellospeak.c speak.h  //如果一些hellospeak.c的函数声明是在头文件speak.h中那么也得在这后面加上                                         
        gcc -c hellospeak.c                                                
speak.o : speak.c  speak.h                                                  
        gcc -c speak.c                                                    
clean :                                                                  
        rm hello_demo speak.o  hellospeak.o  //当执行make clean时就会执行这个语句 

下面是我写的整体例子

//speak.h
#include<stdio.h>
#include<stdlib.h>
void helloSpeak();
--------------------------------------------------------------




//speak.c
#include"speak.h"
void helloSpeak()
{
 printf("Hello Makefile\n");
}
--------------------------------------------------------------




//main.c
#include"speak.h"
int main()
{
  helloSpeak();
  return 0;
}



--------------------------------------------------------------
//Makefile
Hello: main.o speak.o
        gcc -o Hello  main.o speak.o
main.o: main.c speak.h
        gcc -c main.c
speak.o: speak.c speak.h
        gcc -c speak.c
clean:
        rm Hello speak.o main.o

~

运行效果👇

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

 到此这篇关于shell脚本编程Makefile的使用的文章就介绍到这了,更多相关shell Makefile内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 用模板的方式创建守护进程代码实例

    用模板的方式创建守护进程代码实例

    用模板的方式创建守护进程,只需要定义一个与int work(int argc,char **argv)相同的伪入口函数传入start_domain()函数即可
    2013-12-12
  • 强制删除rpm包的方法

    强制删除rpm包的方法

    本文给大家介绍强制删除rpm包,对rpm包删除方法感兴趣的朋友可以一起学习
    2015-11-11
  • 如何在Linux下修改Mysql的用户(root)密码

    如何在Linux下修改Mysql的用户(root)密码

    这篇文章主要介绍了如何在Linux下修改Mysql的用户(root)密码,分两种情况:第一种当拥有原来的mysql的root密码,第二种情况忘记原来的mysql的root的密码,需要的朋友可以参考下
    2015-08-08
  • 更改linux用户登录shell的操作方法

    更改linux用户登录shell的操作方法

    这篇文章主要为大家分享了更改linux用户登录shell的方法,感兴趣的朋友可以参考下
    2013-11-11
  • Shell脚本实现检测文件是否被修改过代码分享

    Shell脚本实现检测文件是否被修改过代码分享

    这篇文章主要介绍了Shell脚本实现的检测文件是否被修改代码分享,其实了解了原理就可以做很多事了,需要的朋友可以参考下
    2014-09-09
  • 详解Shell $*和$@之间的区别

    详解Shell $*和$@之间的区别

    这篇文章主要介绍了详解Shell $*和$@之间的区别,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-03-03
  • 查找目录下同名但不同后缀名文件的shell脚本代码

    查找目录下同名但不同后缀名文件的shell脚本代码

    这个脚本可以实现指定目录下同名但不同后缀名的查找,可以拓展为删除指定的文件的脚本,觉得很实用,分享一下
    2013-02-02
  • Linux bc命令实现数学计算器

    Linux bc命令实现数学计算器

    这篇文章主要介绍了Linux bc命令实现数学计算器,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-03-03
  • linux命令详解之chkconfig命令使用方法

    linux命令详解之chkconfig命令使用方法

    chkconfig命令主要用来更新(启动或停止)和查询系统服务的运行级信息。谨记chkconfig不是立即自动禁止或激活一个服务,它只是简单的改变了符号连接,下面看一下它是如何使用的
    2014-01-01
  • linux下passwd命令设置修改用户密码的方法

    linux下passwd命令设置修改用户密码的方法

    下面小编就为大家带来一篇linux下passwd命令设置修改用户密码的方法。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-02-02

最新评论