首页 > 其他分享 >Make简介和Makefile编写规则

Make简介和Makefile编写规则

时间:2024-01-21 22:05:27浏览次数:33  
标签:文件 变量 简介 Make Makefile 编译 make

1.什么是make?
 (1)make定义

  make工程管理器,是Linux下自动编译管理器;为了维护C程序文件,防止不必要的重新编译;对于维护具有相互依赖关系的文件特别有用,对文件和命令的联系提供一套编码方法

自动化编译。
  运行环境,需要一个命令程序make和一个文本文件makefile。

  例子:Makefile -->编译执行: make
all: main.c foo1.c foo2.c foo3.c (all方法)
  gcc main.c foo1.c foo2.c foo3.c -o all (all生成的文件,gcc后面为依赖的文件

  (2)make使用
  make [options] [target] ..
  options:make工具参数选项 target:Makefile中指定的目标
  -f 文件名        -C 路径名             -e 不允许在Makefile中替换环境变量的赋值
  -k 执行命令出错时,放弃当前目标,继续维护其他目标
  -s 执行但不显示命令,常用来检查Makefile的正确性
  -S 如果执行命令出错就退出

  (3)Make编译几点原则

  a.工程没有编译过,那么所有C文件都需要编译和链接

  b.某几个C文件被修改,则只需要编译被修改的C文件,并连接目标程序
  c.如果工程头文件被修改,则需要编译引入了这几个头文件的C文件,并链接目标程序

2.makefile书写规则

 (1)书写规则

目标文件名 : 依赖文件
命令行

目标文件名 : 依赖文件 ; 命令行
命令行
//备注:如果命令太长,可以 \ 作为换行符,Make对一行上有多少字符未限制

 (2)在规则中使用通配符:  

  * 任意字符  ? 单个字符  [..] 一个范围 。如[abcd] 表示a b c d四个字符

clean:
  rm -r *.o


print: *.c
  Ipr -p $?
  touch print

  $? 自动变量,表示所有比目标新的依赖文件集合
  通配符可以使用在变量中:如 object = *.o
  注意:上面通配符赋值,objects变量值就是*.o  

  (3)makefile中变量其实是C/C++中的宏,如果让通配符在变量中展开,即让objects值为

  所有.0的文件名集合,则
objects := $(wildcard *.o) //通过wildcard来指示,  伪目标: clean 不是文件,是一个标签。申明伪目标: .PHONY: clenn

  多目标:空格隔开
  $@ 表示目标集合

  (4)Make一条条执行,每条命令以tab键开头(命令tab键开头)。如:

exec:
  cd /home/huchao
  pwd

  //执行:make exec,会进入/home/huchao路径,并pwd命令打印结果

  忽略出错:命令前加减号-,不管命令是否出错都认为成功
exec:
  - cd /home/huchao
  pwd

  makefile中变量就像C/C++中的宏,代表一个文本字串,在makefile执行时候会自动展开在所使用的地方,区别变量可改变;

 (5)变量基础:  

  变量:可以包含字符、数字、下划线(可以数字开头),大小写敏感,  

  不含有 : # = 或空字符在声明时需要给与初值,使用 $变量名。赋值变量:支持嵌套赋值

  := 前面的变量不能使用后面的变量,只能使用前面已经定义好的变量
  如:
  A = $B
  B = too //则A为too,前面的变量可以引用后面的变量值

  X := foo
  y = $x bar
  x := later
  ===> y := foo bar
     x := later

 

 

标签:文件,变量,简介,Make,Makefile,编译,make
From: https://www.cnblogs.com/huchao12/p/17978480

相关文章

  • 无涯教程-CodeIgniter - 简介
    CodeIgniter是一个函数强大的PHP框架,无涯教程喜欢简称它叫CI,由EllisLab创建,现在是不列颠哥伦比亚技术学院的一个项目。是一套给PHP网站开发者使用的应用程序开发框架和工具包。它提供一套丰富的标准库以及简单的接口和逻辑结构,其目的是使开发人员更快速地进行项目开发。本教程是......
  • 【Tomcat】Web服务器Tomcat简介及配置
    Tomcat简介Tomcat配置及虚拟路径配置<build><plugins><plugin><groupId>org.apache.tomcat.maven</groupId><artifactId>tomcat7-maven-plugin</artifactId><version>2.1</version>......
  • sed的&操作符+复盘和把经验转化为能力+sed替换关联环境变量+SystemC+C++的struct和cla
    sed的&操作符sed一般是按行操作,如果匹配到,那么匹配到的内容被表示为&。以下是在单行操作中,想要实现在某行数据特定字符前后插入字符的方法。复盘和把经验转化为能力https://www.163.com/dy/article/GEI2Q9EN05429MRP.html通过寻找和尝试新的做事方式,你才能提高自己的能力。......
  • Linux操作系统简介:为何成为全球开发者热门选择?
    Linux是一种自由和开放源代码的操作系统。这意味着任何人都可以查看、修改和分发Linux的源代码,而不需要支付任何费用。这种开放性使得Linux能够快速地发展和进步,吸引了全球数以万计的开发者共同参与其中,形成了一个庞大的开源社区。那么,Linux究竟是什么?它又是如何影响我们的生活的......
  • 初中英语优秀范文100篇-063Persistence Makes My Life Better-坚持让我的生活更美好
    PDF格式公众号回复关键字:SHCZFW063记忆树1Persistenceislikeateacherofmine.翻译坚持就像我的一位老师简化记忆坚持句子结构主语:"Persistence"(坚持)谓语:"islike"(像是)补语:"ateacherofmine"(我的一位老师)2Itteachesmealotandmakesm......
  • 无涯教程-MATLAB - 简介
    MATLAB(MatrixLaboratory,矩阵实验室)是由美国TheMathWorks公司出品的商业数学软件。MATLAB是一种用于算法开发、数据可视化、数据分析以及数值计算的高级技术计算语言和交互式环境。除矩阵运算、绘制函数/数据图像等常用功能外,MATLAB还可用来创建用户界面,以及调用其它语言(包括C、C......
  • CAN总线协议简介及其常见的应用领域
    CAN总线协议是一种串行通讯协议,主要用于汽车和工业自动化领域,实现了实时应用的需求。首先,CAN总线协议的基本概念包括报文、信息路由和位速率。在CAN系统中,总线上传输的信息以不同格式的报文发送,但长度有限。CAN总线的位速率根据系统的不同而不同。其次,CAN总线协议具有多主控制的特......
  • • ​​os.makedirs​
    os.mkdir和os.makedirs都是Python中用于创建目录的函数,但它们之间存在一些关键的区别¹²:os.mkdir:此函数用于创建单个子目录。如果指定了不存在的中间目录,它将抛出一个异常。os.makedirs:此函数用于递归地创建目录。就像在bash中的mkdir-p一样,如果中间目录不存在,os.makedirs会创建......
  • 电视剧《雪花那个飘》人物简介—韩老六
    电视剧《雪花那个飘》人物简介—韩老六来源:搜狐娱乐2011年05月14日17:53  我来说两句 (0)复制链接打印大中小韩老六,男,三十八岁,北京长青藤师范大学中文系一班学生。入学前系辽北某农村民办教师。此人在家中排行老六,故有此名。他农民意识极强,由此引发了与冷......
  • 【驱动】I2C驱动分析(一)-I2C驱协议简介
    什么是I²CI²C叫集成电路总线它是一种串行通信接口,具有双向两线同步串行总线,通常由两根线组成——SDA(串行数据线)和SCL(串行时钟线)和上拉电阻。它们用于需要许多不同部件(例如传感器、引脚、扩展和驱动程序)协同工作的项目,因为它们可以将多达128个设备连接到主板,同时保持清晰......