首页 > 其他分享 >makefile使用摘要

makefile使用摘要

时间:2024-01-29 20:44:06浏览次数:27  
标签:规则 Makefile make 摘要 makefile 目标 编译 使用 执行

问题1:多个源文件参与的编译过程中,全部重新编译不合理;

gcc -c *.c

问题2:在手动处理过程中,由于一个基础文件的更改,导致后续的编译过程非常容易出错。

解决方法:编写makefile文件

$(sources:.c=.d)是一个变量替换语法,把sources变量中每一项的.c替换成.d

特殊变量:

$^  表示规则中的所有条件,组成一个列表,以空格分隔,如果这个列表中有重复的项则将其消除。

$@  表示规则中的目标

$<  表示规则中的第一个条件

$?  表示规则中所有比目标新的条件,组成一个列表,以空格分隔。

变量:

?=第一次定义有效。:=立即展开。=、+=建立依赖关系图后执行展开。

命令列表中@修饰只显示输出结果,-修饰的出错继续执行。

.PHONY: clean表示为目标

目标和条件之间的关系是:欲更新目标,必须先更新它的所有条件;所有条件中只要有一个条件被更新了,目标也必须随之被更新。

所谓“更新”就是执行一遍规则中的命令列表,命令列表中的每条命令必须以一个Tab开头,注意不能用空格代替这个Tab,Makefile的格式不像C语言的缩进那么随意。对于Makefile中的每个以Tab开头的命令,make会启动一个Shell进程去执行它。

 约定俗成的目标名字有:

all,执行主要的编译工作,通常用作缺省目标。

install,执行编译后的安装工作,把可执行文件、配置文件、文档等分别复制到不同的安装目录。

clean,删除编译生成的二进制文件。

distclean,不仅删除编译生成的二进制文件,也删除其他的生成文件,比如内核源代码make menuconfig配置之后生成的.config文件,一些文档源文件(比如本书的Docbook源文件)经过make之后会转换生成HTML或PDF文件,执行make distclean应该清除所有的生成文件,只留下源文件。

make处理makefile的过程

1.从前到后读取所有规则,建立起完整的依赖关系图。

2.从缺省目标或者命令行指定的目标开始,根据依赖关系图选择适当的规则执行,执行Makefile中的规则和执行C代码不一样,并不是从前到后按顺序执行,也不是所有规则都要执行一遍,

常用的make命令:、

make -n  只打印要执行的命令,而不会真的执行命令(这称为Dry Run),这个选项有助于我们检查Makefile写得是否正确,
      由于Makefile不是顺序执行的,用这个选项可以先看看命令的执行顺序,确认无误了再真正执行命令。 make -C  切换到另一个目录执行那个目录下的Makefile make -p  打印make的隐含规则数据库

 

标签:规则,Makefile,make,摘要,makefile,目标,编译,使用,执行
From: https://www.cnblogs.com/tablong/p/17995242

相关文章

  • 使用阿里云短信验证
    1、登录阿里云2、设置AccessKey 3、由于安全性,此处使用子用户4、点击用户5、创建子用户AccessKey 6、授权7、注意授权主体等8、按照示例代码编写发送短信接口9、注意:需要提前申请好模板和签名等 ......
  • 在内网(不通公网)的情况下,使用pip安装python依赖包
    1.施工服务器后端部署一:准备一台环境与内网虚拟机相同的可以连接外网的虚拟机,python版本,操作系统版本保持一致二:在可以链接外网的机器上使用pip将依赖包的whl文件(也有可能是tar.gz或者tar格式,不过不影响后续使用)#将依赖下载到本地的某个文件中root@iZ8v2rbZ:/sdwork/pyyl#......
  • UTF-8格式编码的文件分为带BOM和不带BOM windows下编程,Linux下编程建议使用“UTF-8无
    UTF-8格式编码的文件分为带BOM和不带BOMwindows下编程,Linux下编程建议使用“UTF-8无BOM格式,“建议使用”UTF-8带BOM格式“Notepad++支持“UTF-8无BOM格式”和“UTF-8带BOM格式”两种UTF-8。一直以来不知道二者有什么区别。程序员它们的区别是:UTF-8带BOM格式,就是在文件头添加......
  • 分界符 EOF 不能使用反引号,反斜杠转义的技巧
    在分界符EOF前添加反斜杠\,或者用单引号、双引号括起来:mysql-h172.16.20.20-uroot-p'abcdefg5'<<"EOF"DROPDATABASE`prod-erp`;CREATEDATABASE`prod-erp`CHARACTERSETutf8mb4COLLATEutf8mb4_general_ci;use`prod-erp`;sourcetest-erp.sql;EOF---------......
  • celery的快速使用
    celery的快速使用1.安装celery模块pipinstallcelery 2.书写demo.py文件fromceleryimportCeleryimporttimebroker='redis://127.0.0.1:6379/1'backend='redis://127.0.0.1:6379/2'app=Celery('app',broker=broker,backend=backend)......
  • 【TiDB 实战】使用 HyBench 测试 TiDB
    本文将介绍如何使用HyBench对TiDB进行测试,并简述HyBench适配TiDB的注意事项。Hybench是一款由中国软件评测中心、清华大学联合牵头,多家公司共同研发的HTAP数据库基准测试工具。TiDB是一款兼容MySQL的数据库,Hybench已在Gitee开源,支持MySQL数据库,通过修改HyBe......
  • 使用 AI 构建面向未来的 DevOps
    从去年底开始,生成式AI(AIGC) 作为热门话题,深入影响到了IT行业的各个领域和所有从业者。DevOps 是通过持续集成、持续部署、持续交付的方式,将开发和运营更好地整合在一起的流程,它的发展与架构的演进是紧密相连的。当前的架构逐渐在向微服务化的方向发展,出现了许多新的技术,如容......
  • C# 使用自定义特性标注类的方法,直接在当前类中让Main函数调用它
    有的时候我们想要再Main执行一些代码,如果直接在里面写的话,下次再想用的时候就会把之前的代码删掉,好不容易写的代码不想删掉于是我们可以将这些代码写到类文件中,想要执行了,就在Main中调用该类的方法,但是有的时候我们又懒的去Main函数指定的,有没有什么办法能直接在新类中就能指定......
  • Django 中使用ModelForm生成HTML标签
    在Django中,使用ModelForm来生成HTML表单标签是一种常见且高效的做法。ModelForm可以自动根据模型的字段生成对应的表单字段,这大大简化了表单的创建和处理过程。以下是如何在Django中使用ModelForm来生成HTML标签的基本步骤:步骤1:创建ModelForm首先,你需要为你的模型......
  • MSE Nacos 配置变更审计平台使用指南
    作者:孙立(涌月)、邢学超(于怀)、李艳林(彦林)配置审计平台简介Nacos[1]作为一款业界主流的微服务注册中心和配置中心,管理着企业核心的配置资产,由于配置变更的安全和稳定诉求越来越高,因此我们提供了安全和可追溯性保障机制。配置变更的途径主要包括控制台手动发布和使用NacosSDK客户......