想要书写一个完整的 Makefile文件,需要了解 Makefile 的相关的书写规则。我们已经知道了 Makefile 描述的是文件编译的相关规则,它的规则主要是两个部分组成,分别是依赖的关系和执行的命令,其结构如下所示:

targets : prerequisites
    command

或者是

targets : prerequisites; command
    command

相关说明如下:

  • targets:规则的目标,可以是 Object File(一般称它为中间文件),也可以是可执行文件,还可以是一个标签;

  • prerequisites:是我们的依赖文件,要生成 targets 需要的文件或者是目标。可以是多个,也可以是没有;

  • command:make 需要执行的命令(任意的 shell 命令)。可以有多条命令,每一条命令占一行。

注意:我们的目标和依赖文件之间要使用冒号分隔开,命令的开始一定要使用Tab键。

通过下面的例子来具体使用一下 Makefile 的规则,Makefile文件中添代码如下:

test:test.c

gcc -o test test.c

上述代码实现的功能就是编译 test.c 文件,通过这个实例可以详细的说明 Makefile 的具体的使用。其中 test 是的目标文件,也是我们的最终生成的可执行文件。依赖文件就是 test.c 源文件,重建目标文件需要执行的操作是gcc -o test test.c。这就是 Makefile 的基本的语法规则的使用。

使用 Makefile 的方式:首先需要编写好 Makefile 文件,然后在 shell 中执行 make 命令,程序就会自动执行,得到最终的目标文件。

通过上面的例子我们可以了解到,Makefile 的规则很简单,但这并不是 Makefile 的全部,这个仅仅是它的冰山一角。仅仅靠一个规则满足不了我们对于大的工程项目的编译。甚至几个文件的编译都会出现问题,所以要学习的东西还有很多。简单的概括一下Makefile 中的内容,它主要包含有五个部分,分别是:

1) 显式规则

显式规则说明了,如何生成一个或多的的目标文件。这是由 Makefile 的书写者明显指出,要生成的文件,文件的依赖文件,生成的命令。

2) 隐晦规则

由于我们的 make 命名有自动推导的功能,所以隐晦的规则可以让我们比较粗糙地简略地书写 Makefile,这是由 make 命令所支持的。

3) 变量的定义

在 Makefile 中我们要定义一系列的变量,变量一般都是字符串,这个有点像C语言中的宏,当 Makefile 被执行时,其中的变量都会被扩展到相应的引用位置上。

4) 文件指示

其包括了三个部分,一个是在一个 Makefile 中引用另一个 Makefile,就像C语言中的 include 一样;另一个是指根据某些情况指定 Makefile 中的有效部分,就像C语言中的预编译 #if 一样;还有就是定义一个多行的命令。有关这一部分的内容,我会在后续的部分中讲述。

5) 注释

Makefile 中只有行注释,和 UNIX 的 Shell 脚本一样,其注释是用“#”字符,这个就像 C/C++ 中的“//”一样。如果你要在你的 Makefile 中使用“#”字符,可以用反斜框进行转义,如:“\#”。

drools规则中调用其它规则_Makefile文件中包含哪些规则?相关推荐

  1. python 在一个py文件中调用另一个py文件中的变量以及一个有趣的问题

    python 在一个py文件中调用另一个py文件中的变量以及一个有趣的问题 1.在一个py文件中调用另一个py文件中的变量 新建一个py文件,记为t1.py # t1.py m = 2 n = 1 a ...

  2. [原创]C/C++语言中,如何在main.c或main.cpp中调用另一个.c文件

    C/C++语言中,如何在main.cpp中调用另一个.c文件主要有5种思路: 1.在VS2012 IDE中,将被引用的.c文件后缀名全部修改为.h,然后通过IDE的解决方案资源管理器中鼠标右键单击&q ...

  3. 调用另一个python文件中的代码

    python3.*版本下好像不一样,正确引用方法: utils是同级目录,options是文件,后面是函数 from .utils.options import parseOptions from . ...

  4. 转:如何调用另一个python文件中的代码

    原文地址:https://www.cnblogs.com/jiuyigirl/p/7146223.html 如何调用另一个python文件中的代码 无论我们选择用何种语言进行程序设计时,都不可能只有一 ...

  5. cmd执行bat结果不回显_cmd - 如何在bat文件中调用另一个bat文件

    情景一:两个bat文件在同一个目录下 有时候我们需要在一个bat文件中调用另一个bat文件,比如我们想在a.bat中调用b.bat,如下. a.bat @echo off echo I am a.ba ...

  6. cmd 如何在bat文件中调用另一个bat文件

    微信搜索:"二十同学" 公众号,欢迎关注一条不一样的成长之路 情景一:两个bat文件在同一个目录下 有时候我们需要在一个bat文件中调用另一个bat文件,比如我们想在a.bat中调 ...

  7. C# 将List中的数据导入csv文件中

    //http://www.cnblogs.com/mingmingruyuedlut/archive/2013/01/20/2849906.html C# 将List中的数据导入csv文件中 将数据保 ...

  8. C++ 在一个cpp文件中使用另一个cpp文件中定义的函数

    C++ 在一个cpp文件中 使用另一个cpp文件中定义的函数 建立一个console项目 头文件 cpp文件 main.cpp 建立一个console项目 以dev为例,在[文件][新建][项目],新 ...

  9. 登录plsql developer时候出现连接串问题导致的下拉列表中没有出现tnsnames.ora文件中配置的那些服务...

    问题:登录plsql developer时候出现连接串问题导致的下拉列表中没有出现tnsnames.ora文件中配置的那些服务 方法:可能是环境变量配置错了 示例 ORACLE_HOME= C:\Pr ...

  10. 通过 crontab将linux中的top信息写入文件中

    通过 crontab将linux中的top信息写入文件中. 问题:1.直接执行命令可以正常,放到shell脚本里面执行不行.            2.直接执行shell脚本正常输出,放到cronta ...

最新文章

  1. 微信小程序(canvas)画图保存到本地相册(wepy)
  2. 对现有代码的分析方法随想
  3. 为什么要把js放在body的末尾?
  4. GMIS 2017 大会陈雨强演讲:机器学习模型,宽与深的大战
  5. c语言仿ce内存搜索工 源代码_C语言函数库:动态库和静态库优缺点比较
  6. oracle根据分区移动,Oracle 12c 在线移动分区和部分分区read only
  7. mysql必学十大必会_MYSQL 学习(一)--启蒙篇《MYSQL必知必会》
  8. cmake 添加二进制文件_CMake构建系统
  9. php文件上传格式限制,如何在PHP中限制文件上传类型的文件大小?
  10. 全球自动驾驶第一梯队“成团出道”,谁站 C 位?
  11. 简述什么是 Cloud Native
  12. FindWindowEX应用实例二则
  13. 当前五大浏览器内核及简史
  14. 学习.net 2.0需要讲究一下策略
  15. 推荐一款强大的国产开源监控系统!
  16. 庆贺:上传资源时已支持不允许动态调分
  17. 机器人建模中移动关节如何建立坐标系_简述空间机器人运动学和动力学建模
  18. 将系统临时文件夹恢复到原来默认的目录
  19. 微博商城开启社会化电商之路
  20. python excel 单元格换行_数据标准化 使用Python脚本处理excel单元格换行符

热门文章

  1. Python案例:汉诺塔游戏
  2. 17.立体匹配——匹配问题,好区域匹配 测验,窗口大小的影响,遮蔽(Occlusion),顺序约束_2
  3. php错误没有进入catch,php – 致命错误:没有try / catch块的未捕获异常
  4. bzoj3124 [Sdoi2013]直径 直径+树形dp
  5. 2017.9.29 数三角形 思考记录
  6. UE3 基本的分析及优化技术
  7. javascript基础学习
  8. Centos7最小化安装
  9. 用python重构策略模式
  10. 1.8. subshell