首页 > 系统相关 >正点原子Ubuntu入门014---Makefile基本语法

正点原子Ubuntu入门014---Makefile基本语法

时间:2023-07-27 15:48:15浏览次数:37  
标签:文件 Makefile calcu 目标 --- 014 input main

一、Makefile规则格式

目标……:  依赖文件集合

(Tab键)命令1

(Tab键)命令2

(Tab键)命令3

……

 

 先判断依赖文件是否存在,存在才依次运行命令

 

main: main.o input.o calcu.o
    gcc -o main main.o input.o calcu.o
main.o: main.c
    gcc -c main.c
input.o: input.c
    gcc -c input.c
calcu.o: calcu.c
    gcc -c calcu.c

clean:
    rm *.o
    rm main

 

首先更新第一条规则中的 main,第一条规则的目标成为默认目标,只要默认目标更新了那么就认为 Makefile 的工作。

在第一次编译的时候由于 main 还不存在,因此第一条规则会执行,
第一条规则依赖于文件 main.o、 input.o 和 calcu.o 这个三个.o 文件,这三个.o 文件目前还都没有,因此必须先更新这三个文件。 make 会查找以这三个.o 文件为目标的规则并执行。

以 main.o为例,发现更新 main.o 的是第二条规则,因此会执行第二条规则,第二条规则里面的命令为“gcc–c main.c”,这行命令很熟悉了吧,就是不链接编译 main.c,生成 main.o,其它两个.o 文件同理。

 

因此Makefile工作流程是:

1、 make 命令会在当前目录下查找以 Makefile(makefile 其实也可以)命名的文件。
2、当找到 Makefile 文件以后就会按照 Makefile 中定义的规则去编译生成最终的目标文件。
3、当发现目标文件不存在,或者目标所依赖的文件比目标文件新(也就是最后修改时间比
目标文件晚)的话就会执行后面的命令来更新目标。

二、Makefile变量

#Makefile 变量的使用
objects = main.o input.o calcu.o
main: $(objects)
    gcc -o main $(objects)

 

  • Makefile注释用   “#”
  • 定义了一个变量   objects,变量引用用  $(变量名)

 

  • 等号  =
 name = zzk
 curname = $(name)
 name = zuozhongkai
 print:
     @echo curname: $(curname)
#如果最后一行不加@,就会将运行过程一起打印出来                     

 

 打印结果是最后一次的赋值

变量的真实值取决于它所引用变量的最后一次有效值

 

  • 赋值符  :=

就表示直接赋值,赋予当前位置的值

 

  • 赋值符  ?=

表示如果变量没有被赋值,就赋值等号后的内容,否则仍然是之前赋值的内容

 

  • 变量追加  +=

Makefile中的变量是字符串,+=就可以向变量中追加赋值

三、Makefile模式规则

%就是通配符

 

%.c:%.o

  gcc -c $<

 

  • 自动化变量

    $@

    表示目标集,“集”的意思就是组合,全部,有多个目标,$@就是目标集合。

    $^

    所有依赖目标的集合,注意,这里说的是“依赖”,也就是目标的组成元素。

   $<

    依赖目标中的第一个目标名字,也就是上面说的$^中的第一个元素。

 

  • 伪目标
  • 不管当前文件夹有没有与伪目标重名的文件,都会执行伪目标

  

 

标签:文件,Makefile,calcu,目标,---,014,input,main
From: https://www.cnblogs.com/xlscn/p/17584359.html

相关文章

  • uni-app 怎么打包
    看了网上很多打包的mad没有一个可以用的特别麻烦有的还要登录绑定手机号什么的最后没什么吊用1  当你点击获取的时候会有这个弹框不要管直接获取 获取到之后 然后就在控制台开始编译了  这个就是它编译好的h5静态文件直接拖到服务器上面就行了......
  • M1-Mac-Parallels Desktop-Windows11 安装 CP210x 串口驱动
    设备作为虚拟COM端口工作时,需要CP210xUSB至UART桥虚拟COM端口(VCP)驱动器以促进与CP210x产品的主机通信。也可使用直接存取驱动器将这些设备连接至主机。我需要在Windows系统下调试WHEELTEC的9轴传感器N100。由于办公电脑是M1的MacAir,所以只能在Paral......
  • NGS实验室质控-DNA污染控制方法篇(引用)
    NGS实验室质控-DNA污染控制方法篇 本篇主要和大家分享有关NGS检测体细胞突变时判断DNA污染的方法。  一、FDA产品-MSK-IMPACT的DNA污染控制方法 1)判断样本交叉污染(samplemix-up) 计算参考样本和待查样本间的“不一致比例”,即在参考样本中纯合基因......
  • Premiere Pro 2023 - 专业的视频编辑软件mac/win版
    PremierePro是一款由Adobe开发的专业视频编辑软件,PremierePro2023是其最新版本。作为行业领先的视频编辑工具之一,PremierePro提供了广泛而强大的功能,使用户能够创建高质量的视频内容。→→↓↓载PremierePro2023mac/win版 PremierePro2023具有直观的用户界面和丰富......
  • set.a.light 3D STUDIO - 3D摄影棚模拟布光软件mac/win版
    set.a.light3DSTUDIO是一款专业的摄影灯光模拟软件,为摄影师和摄影爱好者提供了一个真实、细致的虚拟摄影棚环境。它可以帮助用户在计算机上进行灯光设置和调整,以达到理想的照片效果。→→↓↓载set.a.light3DSTUDIO set.a.light3DSTUDIO具有丰富的功能和直观的界面,使用......
  • vue中vue-alipayer-v2的使用
    项目中播放视频用到了vue-alipayer-v2,代码如下<template><VueAliplayerV2:source="$api.showImageUrl+playvideo.videopath"ref="VueAliplayerV2"></VueAliplayerV2></template><scrip......
  • SFP3012-ASEMI快恢复二极管参数、规格、尺寸
    编辑:llSFP3012-ASEMI快恢复二极管参数、规格、尺寸型号:SFP3012品牌:ASEMI芯片个数:2芯片尺寸:102MIL*2封装:TO-247恢复时间:65ns工作温度:-40°C~175°C浪涌电流:160*2正向电流:30A反向耐压:1200V正向压降:1.75V引脚数量:3漏电流:>10uaSFP3012二极管特性:SFP3012快恢复二极管广......
  • Python数据可视化-折线图
    Python数据可视化-折线图一、JSON数据格式1.1什么是jsonJSON是一种轻量级的数据交互格式。可以按照JSON指定的格式去组织和封装数据JSON本质上是一个带有特定格式的字符串主要功能:json就是一种在各个编程语言中流通的数据格式,负责不同编程语言中的数据传递和交互1.2json......
  • 认识元数据-元数据分类
    1.什么是元数据  元数据是描述数据的组织、数据域及其关系的信息,简言之数据的相关信息而存在的数据,有了元数据可以帮助我们更好的理解业务,实现业务,实现数据资产化。 2.元数据的类型    元数据主要分为技术元数据,业务元数据,管理元数据三大类。技术元数据    技......
  • 关于HCIE-Datacom Part-1的一点想法
    目录关于提升速度理解是第一位的顺序与结构通过Vim提速附件部分草图关于提升速度理解是第一位的之所以把理解放在第一位,是因为对知识点理解的越深刻,就会越有自信,心态说就会越平和,从而产生一种掌控感,这种掌控感在考试的过程当中至关重要,据我所知,有相当一部分同学是因为考试时过......