zoukankan      html  css  js  c++  java
  • MATLAB---make与makefile简单介绍

    1 make、makefile概述

    makefile定义了一系列的规则,来规定哪些部分先编译,哪些部分后编译,写好makefile以后,只需一个make命令就可以让整个工程完全自动编译,所以简单的说,make&makefile实现了大工程的自动化编译。

    2 make

    make是如何工作的?

    • make会在当前目录下找名字为"makefile "或"Makefile"的文件;
    • 若找到makefile文件,接着找第一个目标文件(target),并把它作为最终的目标文件;
    • 若target文件依赖后面的.o文件更新,则执行后面定义的命令会生成target文件;
    • 某个.o文件也会依赖若干个源文件和头文件,它们根据命令生成.o文件。

    根据make的依赖性,make会一层层地去找文件的依赖性,直到最终第一个target文件被编译成功。整个过程类似于数据结构中栈的操作。

    3 makefile

    3.1 makefile里是什么?

    例子:

    target:main.o test.o
        cc -o target main.o teat.o
    main.o:main.c x.h
        cc -c main.c
    test.o:test.c y.h
        cc -c test.c
    clean:
        rm target main.o test.o

    可以看出,makefile中主要由两个部分组成:

    • 文件依赖关系
    • 生成所需命令

    其中clean是一个伪目标文件,可用".PHONY:clean"在其前面注明。执行make命令即可编译,执行make clean即可删除所有目标文件。

    3.2 makefile中的变量赋值?

    • "="是最基本的赋值,makefile会将整个makefile展开后,再决定变量的值。
    • ":="是覆盖当前的值,其取决于当前的赋值,而不是最终的赋值(比较好判断)。
    • "?="是若没有被赋值过就赋等号后的值。
    • "+="是添加等号后的值。

    3.3 简化makefile

    可以利用变量减少重复,及利用makefile的自动推导简化makefile,例如:

    #Makefile
    objects:main.o test.o
    target:$(objects)
        cc -o target $(objects)
    main.o:x.h       #这就用到了自动推导。
    test.o:y.h
    .PHONY:clean   #说明clean是一个伪目标文件。
    clean:
        rm target $(objects)

    因为这个编译较简单,优势可能不太明显,若要是大工程,变量和自动推导的使用会让makefile有很大的简化。

    注:

    • makefile中命令必须以[tab]键开始。
    • 若指定特定的makefile,可用"-f"和"--file"参数。
    • include,被包含的文件会被原封不动的放在当前文件包含的位置,如:
    include foo.make
    #不能以[tab]键开始

    参考:https://www.cnblogs.com/dengchj/p/4379645.html

  • 相关阅读:
    Laravel自定义分页样式
    mysql中 key 、primary key 、unique key 和 index 有什么不同
    PHP RSA公私钥的理解和示例说明
    PHP操作Excel – PHPExcel 基本用法
    Yii 1.1 常规框架部署和配置
    阿里云服务器 Ubuntu 安装 LNMP
    全国地区sql表
    十道海量数据处理面试题与十个方法大总结
    Hibernate中对象的三种状态以及Session类中saveOrUpdate方法与merge方法的区别
    乐观锁与悲观锁——解决并发问题
  • 原文地址:https://www.cnblogs.com/Terrypython/p/9493483.html
Copyright © 2011-2022 走看看