zoukankan      html  css  js  c++  java
  • makefile学习资源

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

    https://seisman.github.io/how-to-write-makefile/overview.html

    1.介绍

    makefile定义了一系列的规则来指定,哪些文件需要先编译,哪些文件需要后编译,哪些文件需要重新编译,甚至于进行更复杂的功能操作,因为makefile就像一个Shell脚本一样,其中也可以执行操作系统的命令。

    make是一个命令工具,是一个解释makefile中指令的命令工具。

    编译与链接

    无论是C、C++,首先要把源文件编译成中间代码文件,即目标文件,在Windows下也就是 .obj 文件,UNIX下是 .o 文件,即 Object File,这个动作叫做编译(compile)。然后再把大量的Object File合成执行文件,这个动作叫作链接(link)。

    编译时,编译器需要的是语法的正确,函数与变量的声明的正确。对于后者,通常是你需要告诉编译器头文件的所在位置(头文件中应该只是声明,而定义应该放在C/C++文件中),只要所有的语法正确,编译器就可以编译出中间目标文件。

    2.makefile

    书写规则:

    我们要写一个Makefile来告诉make命令如何编译和链接这几个文件。我们的规则是:
        1)如果这个工程没有编译过,那么我们的所有C文件都要编译并被链接。
        2)如果这个工程的某几个C文件被修改,那么我们只编译被修改的C文件,并链接目标程序。
        3)如果这个工程的头文件被改变了,那么我们需要编译引用了这几个头文件的C文件,并链接目标程序。

    2.1规则

        target ... : prerequisites ...
                command
                ...
                ...
    •  target也就是一个目标文件,可以是Object File,也可以是执行文件。还可以是一个标签(Label)。
    • prerequisites就是,要生成那个target所需要的文件或是目标。
    • command也就是make需要执行的命令。(任意的Shell命令)

    指示文件的依赖关系,也就是说,target这一个或多个的目标文件依赖于prerequisites中的文件,其生成规则定义在command中。

    例子: 

     ake会比较targets文件和prerequisites文件的修改日期,如果prerequisites文件的日期要比targets文件的日期要新,或者target不存在的话,那么,make就会执行后续定义的命令。

    clean不是一个文件,它只不过是一个动作名字,有点像C语言中的lable一样,其冒号后什么也没有,那么,make就不会自动去找文件的依赖性,也就不会自动执行其后所定义的命令。

  • 相关阅读:
    23种设计模式之外观模式
    HashMap系列之底层数据结构
    HashMap系列之基本概念
    轻松搞定荷兰国旗问题
    服务治理:Spring Cloud Eureka
    Spring Cloud简介
    简单了解什么是微服务架构
    字符串和时间
    调用shell命令
    s3操作
  • 原文地址:https://www.cnblogs.com/BlueBlueSea/p/13847764.html
Copyright © 2011-2022 走看看