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就不会自动去找文件的依赖性,也就不会自动执行其后所定义的命令。

  • 相关阅读:
    linux 错误总结
    linux xampp常见问题
    !WebGL
    !站点列表(无关的站点)
    代码: 瀑布流
    插件:★★★ !!!图片懒加载 lazyload.js 、 jquery.scrollLoading.js
    html调用静态json例子
    !!! jquery mobile常用代码
    国内各类“壳子”浏览器,userAgent 一览
    checkbox的美化(转)
  • 原文地址:https://www.cnblogs.com/BlueBlueSea/p/13847764.html
Copyright © 2011-2022 走看看