Linux操作系统Makefile基本语法

一、Makefile规则格式

目标.....: 依赖文件集合.......
    命令1
    命令2
    .....
main : main.o input.o calcu.o
    gcc -o main main.o input.o calcu.o

        这条规则的目标是 main,main.o、 input.o和 calcu.o是生成 main的依赖文件,如果要更新
目标 main,就必须先更新它的所有依赖文件,如果依赖文件中的任 何一个有更新,那么目标也
必须更新,“更新”就是执行一遍规则中的命令列表。

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

二、 Makefile变量

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

        上述 Makefile语句中, main.o input.o和 calcue.o这三个依赖文件,输入了两遍,如果Makefile复杂的时候这种重复输入的工作就会非常费时间,而且非常容易输错,为了解决这个问题, Makefile加入了变量支持。下面是使用Makefile变量修改后的文件:

objects = main.o input.o calcu.o 
main: $(objects) 
    gcc -o main $(objects)

         Makefile变量只有只有一种就是字符串类型。

2.1、赋值符“=”

        使用“ “=”在给变量的赋值的时候,不一定要用已经定义好的值,也可以使用后面定义的值
比如如下代码:

name = jack
curname = $(name)
name = hijack

print:
        echo curname: $(curname)

  echo:相当于c语言中的printf语句(语句前加上@就不显示语句运行过程如:@echo curname:$(curname))

运行结果如下:

        通过查看结果可知curname最后的赋值为name的最后一次赋值,所以使用“=”借助另外一个变量,可以将变量的真实值推到后面去定义。也就是变量的真实值取决于它所引用的变量的最后一次有效值。

2.2、赋值符“:=”

       使用:=赋值便可以达到向c语言赋值一样如下图所示:

name = jack
curname := $(name)
name = hijack

print:
        echo curname: $(curname)

运行上面的代码得到一下结果:

 2.3、赋值符“?=”

curname ?= jack

        这条语句表示如果curname前面已经被赋值了就继续使用前面的值这条赋值语句相当于空,如果前面没有被赋值那么curname的值就赋为jack。

2.4、赋值符“+=”

curname += main.o

这条语句的意思为若curname原来的值为add.o input.o运行晚上一句之后则curname的值就变成为add.o input.o main.o。

三、Makefile模式规则

,“%”表示长度任意的非空字符串,比如 “%.c”就是所有的以 .c结尾的文件,类似与通配符。当“ “%”出现在目标中的时候,目标中 “%”所代表的值决定了依赖中的 “%”值。

object=main.o calcu.o input.o
main:object
    gecc -o main $(object)

%.o:%.c
    #命令

clean:
    rm *.o
    rm main

四、Makefile自动化变量

        自动化变量就是完成这个功能的!所谓自动化变量就是这种变量会把模式中所
定义的一系列的文件自动的挨个取出,直至所有的符合模式的文件都取完,自动化变量只应该
出现在规则的命令中。

 五、Makefile伪目标

        Makefile有一种特殊的目标 伪目标,一般的目标名都是要生成的文件,而伪目标不代
表真正的目标名,在执行 make命令的时候通过指定这个伪目标来执行其所在规则的定义的命
令。

.PHONY:clean #伪目标

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/449662.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

FRM模型十五:现代投资组合理论(二)

举例说明如何寻找多资产组合下的全局最小方差点。 这里用到了第三方数据库下载的数据,为7只基金在2023年的收益数据,如下图所示(原始数据算不出来所以这里小小的编了一下)。 # 多资产投资组合分析 import numpy as np import pa…

HybridCLR热更新介绍

官方文档 参照视频 HybridCLR介绍 HybridCLR是一个特性完整、零成本、高性能、低内存的近乎完美的Unity全平台原生c#热更方案 HybridCLR与ToLua/XLua、ILRuntime有什么不同 什么是游戏热更新:有热更的游戏更新流程 游戏热更新的种类 资源热更新:主要…

day41 动态规划part3

343. 整数拆分 中等 给定一个正整数 n ,将其拆分为 k 个 正整数 的和( k > 2 ),并使这些整数的乘积最大化。 返回 你可以获得的最大乘积 。 但是dp[0] 和 dp[1]为什么是0值得讨论,或者说不用讨论,压根…

对贝尔曼福德算法进行改进

对于贝尔曼福德算法的时间复杂度是V的绝对值和E的绝对值的乘积,如果说给定的图的节点的数量和边的数量都是较大的情况的时候,算法的运行效率就会非常的低,速度也相应的很慢,所以针对这种情况,对算法进行改进&#xff0…

未来城市:数字孪生技术助力智慧城市构建

目录 一、数字孪生技术的兴起与定义 二、数字孪生技术在智慧城市构建中的应用 1、城市规划与管理 2、智慧交通 3、智慧能源 4、智慧环保 三、数字孪生技术助力智慧城市构建的挑战与对策 四、结语 随着科技的飞速发展,未来城市正在经历一场前所未有的变革。数…

Redis事务 和 主从复制

目录 前言 Redis和MySQL事务区别 事务操作 MULTI EXEC DISCARD WATCH UNWATCH 主从复制 配置主从复制 建立复制关系 info replication 断开复制 安全性 只读 传输延迟 拓扑 一主一从结构 一主多从结构 树形拓扑结构 原理 主从节点建立复…

【深度学习笔记】7_4 动量法momentum

注:本文为《动手学深度学习》开源内容,部分标注了个人理解,仅为个人学习记录,无抄袭搬运意图 7.4 动量法 在7.2节(梯度下降和随机梯度下降)中我们提到,目标函数有关自变量的梯度代表了目标函数…

2024年家政预约上门服务小程序【用户端+商家端+师傅端】源码

024最新家政预约上门服务小程序源码 主要功能:商家入住,师傅入住,缴纳保正金 支持师傅,抢单派单 支持多城市多门下单,支持预约上门服务到店核销 支持补差价义价,支持区域服务限制 基于thinkphp和原生小程序开发

在文件夹下快速创建vue项目搭建vue框架详细步骤

一、首先在你的电脑目录下新建一个文件夹 进入该文件夹并打开控制台(输入cmd指令) 进入控制台后输入 vue create springboot_vue (自己指定名称) 如果出现这类报错如:npm install 的报错npm ERR! network request to http://registry.cnp…

怎样将PPT转成文本格式?PPT文本一键生成文本格式 工作经验分享

在日常工作和学习中,我们经常需要将PPT文件转换为文本格式,以便更好地进行编辑、搜索和分享。下面,我将介绍2种常见的PPT转文本格式的方法,帮助大家轻松实现这一需求。 方法一、使用汇帮PDF转换器软件里的“PPT文件操作”菜单进行…

Vue3 ElementPlus-table组件(合计)合并列

在使用ElementPlus的table组件的时候&#xff0c;我们通常会处理合计&#xff0c;当遇到合计行需要合并列的时候&#xff0c;可以这样做。 核心就是获取标签&#xff0c;对标签的CSS样式进行设置&#xff0c;以达到合并单元格的效果。 Template <el-tablemax-height"ca…

2024蓝桥杯每日一题(时间日期)

一、第一题&#xff1a;日期差值 解题思路&#xff1a;模拟 写一个计算时间的板子两者相减 【Python程序代码】 mon [0,31,28,31,30,31,30,31,31,30,31,30,31] def pd(x):if x%4000 or (x%40 and x%100!0):return Truereturn False def get_day(y,m,d):res 0for i …

分布式之LoadBalancer

一、LoadBalancer介绍 Spring Cloud LoadBalancer是Spring Cloud官方自己提供的客户端负载均衡器,抽象和实现&#xff0c;用来替代Ribbon&#xff08;已经停更&#xff09;&#xff0c; 二、Ribbon和Loadbalance 对比 组件组件提供的负载策略支持负载的客户端Ribbon随机 Ran…

芯片顶级盛会Hotchips 2021年-苹果M1横空出世(附全套资料下载)

3.22 芯片顶级盛会Hotchips 2021年-未来芯片论坛及资料下载w0 提示&#xff1a;下载链接在文章最后。 HOTCHIPS是一个关于计算机体系结构和电子设计的会议&#xff0c;主要探讨芯片设计、存储器、能源效率、机器学习和人工智能等方面的发展。该会议每年都会召开一次&#xff0…

狂飙Linux平台,PostgreSQL16部署大全

&#x1f4e2;&#x1f4e2;&#x1f4e2;&#x1f4e3;&#x1f4e3;&#x1f4e3; 哈喽&#xff01;大家好&#xff0c;我是【IT邦德】&#xff0c;江湖人称jeames007&#xff0c;10余年DBA及大数据工作经验 一位上进心十足的【大数据领域博主】&#xff01;&#x1f61c;&am…

SpringBlade error/list SQL 注入漏洞复现

0x01 产品简介 SpringBlade 是一个由商业级项目升级优化而来的 SpringCloud 分布式微服务架构、SpringBoot 单体式微服务架构并存的综合型项目。 0x02 漏洞概述 SpringBlade 框架后台 /api/blade-log/error/list路径存在SQL注入漏洞,攻击者除了可以利用 SQL 注入漏洞获取数…

Qt/QML编程之路:openglwidget和倒车影像的切换(43)

关于如何实现一个基于OpenGL的3d 图形,这个有很多专门的介绍,我在开发中遇到了这么一个问题: 如何实现一个倒车影像的video显示与一个3D物体显示的切换,因为开窗在同样的一个位置,如果车子倒车启动,则需要将原本显示3D的地方切换为视频图像的显示。 class testOpenGl : …

[SUCTF 2019]EasySQL --不会编程的崽

即使题目再简单&#xff0c;大佬的思维我还是跟不上哎。。。继续更新sql的第二天 看这个样子就知道是什么了----堆叠注入 老样子&#xff0c;先fuzz一下过滤了哪些关键字。基本如下 from flag handler prepare information_schema performance_schema等。先随便测试一下 吧。…

【io.net空投】交互攻略

一、io.net是什么 Io.net 是一个基于 Solana 的DePIN项目&#xff0c;为人工智能 (AI) 和机器学习 (ML) 公司聚合 GPU 资源。 Io.net 的例子&#xff0c;就是鼓励大家出借 GPU 算力&#xff0c;为 AI 或机器学习&#xff08;ML&#xff09;公司提供更低价、更有效率的算力资源…

jmeter 中用python 实现请求参数的随机

首先需要下载插件来让jmeter支持python脚本 下载地址&#xff1a;https://www.jython.org/download&#xff0c;下载完成后放到jmeter安装目录的lib文件夹下 放置完成后需要重启jmeter&#xff0c;添加JSR223 PreProcessor&#xff0c;Language下拉框中多2项 选择第一项&#…