博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Makefile 入门
阅读量:4221 次
发布时间:2019-05-26

本文共 1360 字,大约阅读时间需要 4 分钟。

一、什么是Makefile

一个工程中的源文件不计其数,其按类型、功能、模块分别放在若干个目录中,makefile定义了一系列的规则来指定,哪些文件需要先编译,哪些文件需要后编译,哪些文件需要重新编译,甚至于进行更复杂的功能操作,因为 makefile就像一个Shell脚本一样,其中也可以执行操作系统的命令。这一切都由make 工具 和 Makefile中的规则文件替我们完成。

二、Makefile 的规则

target ... : prerequissites

     command
...
...
含义:

target 要生成的目标文件,可以是可执行文件,也可以是Object File(编译后的 .o文件),或者是一个标签(伪目标)。

prerequisites 要生成目标 target 所需的文件或者目标。也叫生成目标文件的先决条件。
command 生成目标文件需要执行的命令。注意:命令一定要以table键开头。
一个目标文件的生成可能有一个或多个先决条件,而命令决定了以什么方式生成目标文件(比如使用gcc还是g++工具)。

如果先决条件中有一个以上的文件最后修改时间晚于目标文件,或者目标(target)不存在那么,make 工具就会执行定义的命令。

二、使用示例

简单示例:

hello_wrold : hello_world.c

    gcc -o hello_world hello_world.c

 clean:

     rm hello_world
有了Makefile 文件 我们在构造目标文件的时候,只需要执行 make命令,make会按照我们在Makefile 中定义的规则去生成目标文件。当我们在命令行输入 make clean时 make工具会执行我们定义好的clean 下的命令清理文件。

clean 并不是一个文件,只是我们定义一个动作的名字。叫做标签。其冒号后面什么没有先决条件。make 执行该动作下的命令时,需要我们显示指定这个标签的名字。比如可以定义 安装(make install),清理(make clean)等。

三、make 工作过程

当我们输入 make 命令后:

检索。make 在当前工作目录下找名字叫“Makefile”或者“makefile”的文件。如果找不到则会报错,提示你没有指明目标。找到则继续下面的步骤。

生成目标文件。当找到Makefile 文件时,会找文件中的第一个目标文件,并且把这个文件当做最终的目标文件。
依赖。如果第一个目标文件不存在,或者目标文件所以来的先决文件比目标文件新,那么就会执行后面对应的命令来生成目标文件。在此过程中先决文件也可以不存在,此时make 会一层一层地去找文件的依赖关系,直到最终生成第一个目标文件。
需要注意的是:make 在找依赖关系时,如果遇到错误会直接退出,比如依赖文件都找不到,此时make会直接退出,并报错。对于命令执行错误,make根本不管,只管文件的依赖关系。
--------------------- 
作者:春风来不来 
来源:CSDN 
原文:https://blog.csdn.net/a1414345/article/details/74015788 
版权声明:本文为博主原创文章,转载请附上博文链接!

你可能感兴趣的文章
(二)使用预定义模型 QStringListModel例子
查看>>
UVM:7.4.5 加入存储器
查看>>
UVM:7.5.1 期望值与镜像值
查看>>
UVM:7.5.2 常用操作及其对期望值和镜像值的影响
查看>>
UVM:7.6.1 检查后门访问中hdl 路径的sequence
查看>>
UVM:7.6.2 检查默认值的sequence
查看>>
UVM:7.7.1 使用reg_predictor
查看>>
UVM:7.7.2 使用UVM_PREDICT_DIRECT功能与mirror 操作
查看>>
UVM:7.7.3 寄存器模型的随机化与update
查看>>
UVM:7.7.4 扩展位宽
查看>>
UVM:7.8.1 get_root_blocks
查看>>
UVM:7.8.2 get_reg_by_offset 函数
查看>>
UVM:8.1.1 任务与函数的重载
查看>>
UVM:8.1.2 约束的重载
查看>>
UVM:8.2.2 重载的方式及种类
查看>>
UVM:8.2.3 复杂的重载
查看>>
UVM:8.2.4 factory 机制的调试
查看>>
UVM:8.3.1 重载transaction
查看>>
UVM:8.3.2 重载sequence
查看>>
leetcode171.[math] Excel Sheet Column Number
查看>>