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

  • 相关阅读:
    Delphi 控件使用谷歌浏览器控件chromium 安装包是 dcef3-20140522 --碰到的问题
    salesforce零基础学习(九十九)Git 在salesforce项目中的应用(vs code篇)
    Salesforce LWC学习(二十) CLI篇:新版本不支持Audience解决方案
    Salesforce LWC学习(十九) 针对 lightning-input-field的label值重写
    apt安装后需要移除的问题
    mysql 触发器阻止不合理数据插入
    本机环境virtualbox出现问题重装
    php 版本升级后需要对代码进行兼容性检测
    k8s使用需认证的私服仓库
    无法启动electron,提示node_modules/electron/dist/chrome-sandbox is owned by root and has mode 4755.
  • 原文地址:https://www.cnblogs.com/BlueBlueSea/p/13847764.html
Copyright © 2011-2022 走看看