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

targets : prerequisites
    command

或者是

targets : prerequisites; command
    command

相关说明如下:

  • targets:规则的目标,可以是 Object File(一般称它为中间文件),也可以是可执行文件,还可以是一个标签;
  • prerequisites:是我们的依赖文件,要生成 targets 需要的文件或者是目标。可以是多个,也可以是没有;
  • command:make 需要执行的命令(任意的 shell 命令)。可以有多条命令,每一条命令占一行。

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

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

  1. test:test.c
  2. 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 中使用“#”字符,可以用反斜框进行转义,如:“\#”。

2.Makefile文件中包含哪些规则?相关推荐

  1. drools规则中调用其它规则_Makefile文件中包含哪些规则?

    想要书写一个完整的 Makefile文件,需要了解 Makefile 的相关的书写规则.我们已经知道了 Makefile 描述的是文件编译的相关规则,它的规则主要是两个部分组成,分别是依赖的关系和执行 ...

  2. 是否可以在另一个CSS文件中包含一个?

    是否可以在另一个CSS文件中包含一个? #1楼 是的,可以使用@import并提供css文件的路径,例如 @import url("mycssfile.css"); 要么 @imp ...

  3. 如何在另一个JavaScript文件中包含一个JavaScript文件?

    JavaScript中是否有类似于CSS中@import的内容,可让您在另一个JavaScript文件中包含一个JavaScript文件? #1楼 而不是在运行时添加,而是使用脚本在上传之前进行串联. ...

  4. 服务器日志文件中包含堆栈跟踪,日志框架 Logback 官方手册(第三章:Configuration)...

    以下内容翻译整理自logback官方手册,地址:logback官方手册 logback 配置 将日志请求插入应用程序代码需要相当多的计划和工作.观察表明,大约有4%的代码用于日志记录.因此,即使是一个 ...

  5. 【Makefile】Makefile文件中的 .PHONY 的作用

    目录 即看即用 详细说明 即看即用 作用:告诉make,.PHONY:后面跟着的名称不是指文件名,如果makefile中xxxx 写在.PHONY:后面,那么make  xxxx 就表示执行xxxx ...

  6. linux 批量替换所有文件中包含的字符串

    sed -i "s/原来字符串/新字符串/g" `grep 原来字符串 -rl .`格式: sed -i "s/查找字段/替换字段/g" `grep 查找字段 ...

  7. 在一个JS文件中包含中文字符串,通过innerHTML输出后中文乱码?

    在一个JS文件中包含中文字符串,通过innerHTML输出后中文乱码? Posted on 2008-07-13 12:00 尹合磊 阅读(1902) 评论(0)  编辑 收藏 所属分类: ASP.N ...

  8. 检查xml文件中包含非法xml字符的个数(

    xml中需要过滤的字符分为两类,一类是不允许出现在xml中的字符,这些字符不在xml的定义范围之内.另一类是xml自身要使用的字符,如果内容中有这些字符则需被替换成别的字符. 第一类字符 对于第一类字 ...

  9. VB快速查找大型文件中包含的字符串

    关于查找大型文件中包含的字符串,一般都把文件内容读入到内存,然后在内存里进行比较,却不知这种办法有一个致命的弱点,那就是由于大量的内存申请和释放导致的内存颠簸,会使系统性能下降,严重影响了查找的速度. ...

最新文章

  1. android动态改变菜单栏,Android动态设置主题(使用RxBus模式)
  2. centos安装下载桌面
  3. signature=51b3a9ac95339489ef7384c6e21e303f,nginx – Let’s Encrypt的中间证书
  4. 【基础】基础算法学习笔记(状态空间)
  5. 如何将你的 MySQL 查询速度提升 300 倍
  6. 增加一个输出,解决一个奇怪的死机
  7. 调用java webservice 报错_java调用webservice方法报错
  8. bin code led_LED混Bin生控制文件.pdf
  9. hosts文件是什么? Windows、Mac、Linux的hosts文件在哪里?
  10. 新浪云 php,php在新浪云中使用imagick的方法
  11. 手机指纹识别测试软件,指纹测算-指纹照相机 扫描识别指纹评分
  12. 基于单片机原理的暖风机控制系统设计-毕设课设资料
  13. win7 无法访问服务器共享文件夹,win7系统共享文件夹无法访问的解决方法
  14. 最小二乘法及应用实例
  15. idea 集成Git 遇到的问题 与解决
  16. 星宸科技IC2020笔试
  17. 基于云原生的大数据产品前端实践 | 第七期图文直播文字回放
  18. 一个能在vue3中运行的JSON编辑器,能展示JSON数据的高亮,打开时有默认数据
  19. 一种简单的抽签/抽奖算法逻辑
  20. 电力系统卫星时钟同步(GPS北斗授时)组成及配置

热门文章

  1. python减法报错_python – numpy FloatingPointError:减法中遇到的值无效 – 不可重现?...
  2. css 六角形_实施六角形架构
  3. Oracle EM13C安装部署以及使用
  4. 兴趣点检测方法及其最新改进思路
  5. mysql 逻辑与_MySQL教程54-MySQL逻辑运算符
  6. 计算机中一个字等于多少个字节
  7. win11怎么减少核显占用的内存
  8. 浙里办APP接入H5应用的坑
  9. python画一个心形照片墙怎么摆_柚子教大家如何用python做精美的照片墙!五分钟学会get新技能...
  10. iPhone 6 / 6 Plus 出现后,如何改进工作流以实现一份设计稿支持多个尺寸?