首页 > 其他分享 >makefile 基础学习

makefile 基础学习

时间:2023-03-26 15:55:40浏览次数:34  
标签:文件 makefile make Makefile 基础 学习 编译 须要

今天主要来记录一下makefile的学习。

makefile 规则:

一个工程中的源文件不计数,其按类型、功能、模块分别放在若干个文件夹中,makefile定义了一系列的规则来指定,哪些文件须要先编译,哪些文件须要后编译,哪些文件须要又一次编译,甚至于进行更复杂的功能操作,由于makefile就像一个Shell脚本一样,当中也能够运行操作系统的命令。

 makefile带来的长处就是——“自己主动化编译”,一旦写好,仅仅须要一个make命令,整个工程全然自己主动编译,极大的提高了软件开发的效率。make是一个命令工具,是一个解释makefile中指令的命令工具,一般来说,大多数的IDE都有这个命令,比方:Delphi的make,Visual C++的nmake,Linux下GNU的make。可见,makefile都成为了一种在工程方面的编译方法。

 makefile 介绍

make命令运行时,须要一个 Makefile 文件,以告诉make命令须要怎么样的去编译和链接程序。

首先,我们用一个演示例子来说明Makefile的书写规则。以便给大家一个感兴认识。这个演示例子来源于GNU的make使用手冊,在这个演示例子中,我们的工程有8个C文件,和3个头文件,我们要写一个Makefile来告诉make命令怎样编译和链接这几个文件。我们的规则是:

  • 1)假设这个工程沒有编译过,那么我们的全部C文件都要编译并被链接。
  • 2)假设这个工程的某几个C文件被改动,那么我们仅仅编译被改动的C文件,并链接目标程序。
  • 3)假设这个工程的头文件被改变了,那么我们须要编译引用了这几个头文件的C文件,并链接目标程序。

仅仅要我们的Makefile写得够好,全部的这一切,我们仅仅用一个make命令就能够完成,make命令会自己主动智能地依据当前的文件改动的情况来确定哪些文件须要重编译,从而自己编译所须要的文件和链接目标程序。

(从上面的编译规则,当编写makefile时,如果“.c” /".h"文件被修改的话,只需要编译与修改文件有依赖关系的文件,没有依赖的文件不需要重新编译,最后把所有编译的文件重新链接即可)

makefile 的规则

在讲述这个Makefile之前,还是让我们先来粗略地看一看Makefile的规则。

target ... : prerequisites ...
command
...
...
  • target:目标文件,能够是Object File,也能够是运行文件。还能够是一个标签(Label),对于标签这样的特性,在后续的“伪目标”章节中会有叙述。
  • prerequisites:生成 target 所须要的依赖文件或目标。
  • command:make须要运行的命令,执行规则。

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

 

makefile 基础编写语法:

在编写时,首先要注意三要素:目标、依赖项、命令。

 

标签:文件,makefile,make,Makefile,基础,学习,编译,须要
From: https://www.cnblogs.com/lianglianglu/p/17258817.html

相关文章

  • SpringBoot2 学习资料,基础篇、实用篇、整合篇、原理篇
    SpringBoot2学习资料,需要的请callme省略好多图片。。。。。。......
  • JAVA面试小结之基础篇
    最近,一直忙于业务,发现自己的很多基础知识没有使用的话,都快忘了,感觉很虚。此外,最近经常面试一些同学,有些东西还得自己复习下,才好意思。这里整理一份JAVA面试小结,一来可以持续......
  • javaSE学习Day1之Object类的使用
    Object类的使用Object类Object类中的方法可以在网上搜索得到Object类是所有java类的父类如果类在声明中未使用extends关键字指明其父类,则默认父类为java.lang.Obje......
  • mysql 学习笔记
    ......
  • systemd 的 journalctl 工具及其各种命令的基础知识介绍
    导读本指南介绍了systemd的journalctl工具及其各种命令的基础知识。你可以使用这些命令对 Linux 中的桌面和服务器日志进行故障诊断。以下是如何使用journalctl......
  • 安装Windows Server 2022 - 初学者系列 - 学习者系列文章
          这天要写一个关于系统部署的系列文章,涉及到WindowsServer2022操作系统的安装,所以就写了此文。Windows系列的操作系统安装,以前的博文中都有介绍,这里再次做一......
  • javaSE学习Day1之多态及向下转型
    向下转型的使用Java的多态性:父类指向子类的声明Animalanimal=newDog()//Dog()重写了父类Animal有了对象的多态性以后,内存实际上加载的是子类的属性和方法,但是由......
  • Windows的Dos命令学习
    DOS命令学习一、打开cmd方式1、开始+系统+命令提示符2、win+R+输入cmd打开控制台(推荐使用)3、在任意文件夹下,按住shift键+鼠标右键点击,在此处打开命令行窗口4、在资源......
  • Gin学习笔记--Gin Html模版渲染
    当后台html文件与前台html文件都存储在一个文件下,会显的很臃肿,这时我们需要将前台文件与后台文件区分开来,具体例子如下:案例代码:packagemainimport("github.co......
  • DevExpress19控件学习汇总
    DevExpress19控件学习汇总DevExpress19控件安装(01) RichEditControl控件学习(02)......