美文网首页
makefile note

makefile note

作者: 右中 | 来源:发表于2018-11-28 20:19 被阅读0次

源自:https://blog.csdn.net/haoel/article/details/2886

第一章

何为makefile

  • makefile就像一个Shell脚本一样,其中也可以执行操作系统的命令
  • makefile带来的好处就是——“自动化编译”,一旦写好,只需要一个make命令,整个工程完全自动编译
  • make是一个命令工具,是一个解释makefile中指令的命令工具

编译链接

  • C这类编译语言,首先要把源文件编译成中间文件,在Windows下也就是 .obj 文件,UNIX下是 .o 文件,这个动作叫做编译。然后再把大量的中间文件合成执行文件,这个动作叫作链接
  • 每个源文件都应该对应于一个中间目标文件
  • 链接时,主要是链接函数和全局变量
  • 链接器并不管函数所在的源文件,只管函数的中间目标文件
  • 在大多数时候,由于源文件太多,编译生成的中间目标文件太多,我们要给中间目标文件打个包,在Windows下是 .lib 文件,在UNIX下就是 .a 文件

编译规则

  1. 如果这个工程没有编译过,那么我们的所有C文件都要编译并被链接。
  2. 如果这个工程的某几个C文件被修改,那么我们只编译被修改的C文件,并链接目标程序。
  3. 如果这个工程的头文件被改变了,那么我们需要编译引用了这几个头文件的C文件,并链接目标程序。

Makefile核心规则

target : prerequisites
    command
  • target也就是一个目标文件,还可以是一个标签(Label),对于标签这种特性,在后续的“伪目标”章节中会有叙述
  • prerequisites就是,要生成那个target所需要的文件或是目标
  • command也就是make需要执行的命令

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

command可以是任意的Shell命令,说白了,你可以用它做任意的事!

第一个makefile

    edit : main.o kbd.o command.o display.o /
           insert.o search.o files.o utils.o
            cc -o edit main.o kbd.o command.o display.o /
                       insert.o search.o files.o utils.o

    main.o : main.c defs.h
            cc -c main.c
    kbd.o : kbd.c defs.h command.h
            cc -c kbd.c
    command.o : command.c defs.h command.h
            cc -c command.c
    display.o : display.c defs.h buffer.h
            cc -c display.c
    insert.o : insert.c defs.h buffer.h
            cc -c insert.c
    search.o : search.c defs.h buffer.h
            cc -c search.c
    files.o : files.c defs.h buffer.h command.h
            cc -c files.c
    utils.o : utils.c defs.h
            cc -c utils.c
    clean :
            rm edit main.o kbd.o command.o display.o /
               insert.o search.o files.o utils.o
  • 反斜杠(/)是换行符的意思。

笔者认为,应该是\

  • 我们可以把这个内容保存在文件为“Makefile”或“makefile”的文件中,然后在该目录下直接输入命令“make”就可以生成执行文件edit
  • 如果要删除执行文件和所有的中间目标文件,那么,只要简单地执行一下“make clean”就可以了。

在定义好依赖关系后,后续的那一行定义了如何生成目标文件的操作系统命令,一定要以一个Tab键作为开头
记住,make并不管命令是怎么工作的,他只管执行所定义的命令。
make会比较targets文件和prerequisites文件的修改日期,如果prerequisites文件的日期要比targets文件的日期要新,或者target不存在的话,那么,make就会执行后续定义的命令。

这里要说明一点的是,clean不是一个文件,它只不过是一个动作名字,有点像C语言中的lable一样,其冒号后什么也没有,那么,make就不会自动去找文件的依赖性,也就不会自动执行其后所定义的命令。要执行其后的命令,就要在make命令后明显得指出这个lable的名字。
这样的方法非常有用,我们可以在一个makefile中定义不用的编译或是和编译无关的命令,比如程序的打包,程序的备份

相关文章

  • makefile note

    源自:https://blog.csdn.net/haoel/article/details/2886 第一章 何...

  • 编写Makefile及简单分析

    makefile的好处:一次编写,终身受益 makefile的命名规则: makefile Makefile ma...

  • Makefile 工程管理

    Ⅰ Makefile的用途 Ⅱ Makefile的构成 Ⅲ Makefile构成-----规则 Ⅳ Makefil...

  • win_c/c++ mess01

    1. win makefile 1.1 win makefile,eg: 1.2 makefile explai...

  • [C] Makefile

    Makefile Blog [Makefile的简便写法] [Makefile]菜鸟教程 [gcc编译声明问题] ...

  • 迅为IMX6ULL开发板Ubuntu下C编程入门(二)

    本文是介绍3.3 初识 Makefile+3.4Makefile语法 3.3初识Makefile 3.3.1什么是...

  • Make

    make 目标 顶层 Makefile 作为入口, 来调用其他 makefile, 顶层 makefile 一般有...

  • Makefile学习笔记

    Makefile学习笔记 学习Makefile的资料 《跟我一起写makefile》 《GUN make manu...

  • Linux Kernel Makefiles特殊符号

    Makefile基本规则: Makefile文件中可使用特殊的符号简化Makefile文件的书写。 1、$@:表示...

  • makefile入门一

    Linux下Makefile详解 下面就来看如何写Makefile文件:Makefile文件编写规范: 下来看事例...

网友评论

      本文标题:makefile note

      本文链接:https://www.haomeiwen.com/subject/vvazqqtx.html