makefile相关知识的讲解
目录
makefile文件的介绍
step1:手动创建一个makefile文件
step2:在文件当中编辑指定的命令
step3:退出makefile文件并使用make执行文件当中的命令
step4:使用clean指令清除生成的文件
makefile当中的命令编写方式
目标文件和依赖文件
.PHONY的作用
重复执行没有.PHONY修饰的指令:
重复执行有.PHONY修饰的指令:
调用make指令执行相应的命令:
在代码的编写过程当中,我们经常会遇到需要多文件编辑的情况,但是只使用vim工具似乎只可以针对一个文件进行编辑操作。那么要想针对于多个文本文件进行同时编译,并将他们合为一体,发挥我们平时编写代码所具有的多文件的作用就需要引入一个新的概念:使用make指令将我们想要编译的所有文件都放到makefile文件当中即可。
makefile文件的介绍
makefile是一个文件,其中保存的是我们想要统一所进行的命令操作,例如我们编译代码生成可执行程序的时候所需要执行的 -E -S -c 等操作。(当然可以直接生成可执行程序,但是我们在这里为了模拟makefile的多指令执行操作而特意的分步进行)
因为makefile起到管理命令的作用,所以我们再使用make执行之前必须先创建一个makefile文件,在这个文件当中编辑指定的命令。我们先来通过例子观察一下makefile的具体的使用方法,之后在进一步进行讲解。
step1:手动创建一个makefile文件
step2:在文件当中编辑指定的命令
step3:退出makefile文件并使用make执行文件当中的命令
step4:使用clean指令清除生成的文件
由于我们的指令都是编写在makefile文件当中的,所以我们的步骤一需要首先创建一个makefile文件就不需要进行过多的解释了。
makefile当中的命令编写方式
在使用makefile进行多个指令编辑多文件的时候会有一些新奇的东西,比如类似于第一行当中的蓝色字体表示的含义和第九行当中.PHONY表示的含义。
目标文件和依赖文件
我们先来介绍蓝色字体所在行表示的含义:
其中很容易发现的是我们左边蓝色内容是我们紧接着一行命令的生成文件,而后面白色内容是我们生成生成文件所需要的文件。事实也正如我们看到的那样:左边的蓝色内容表示的是我们的目标生成文件,后面的白色的文件表示的是我们的依赖文件。我们通过后面的指令编译依赖文件生成目标文件。
但是我们会发现另一个事实:我们之前并没有test.o文件呀。确实,当依赖文件不存在的情况下我们会自动向后进行查找,因为后面的命令可能回生成目标文件。当查找完所有的指令还不存在以来文件的时候就会产生报错。
产生的报错:
.PHONY的作用
在明白了目标文件和依赖文件之后还有一个难点——那就是.PHONY究竟是什么呢?我们通过一个简单的现象进行观察:
重复执行没有.PHONY修饰的指令:
重复执行有.PHONY修饰的指令:
我们会发现一个很明显的现象:在执行有.PHONY修饰的指令的时候如果已经存在了目标文件且目标文件没有被修改的时候我们并不会反复创建新的文件,而使用了.PHONY修饰的指令在make的时候并不会因为该指令刚刚被执行过就被忽略。就像是上图中的例子那样:clean指令执行了两次所以第二次删除文件的时候会因为文件不存在而产生异常提示。
其实这就是.PHONY的作用——不让计算机干预我们代码的编译,只要执行一次指令就进行一次相应的操作。举一个简单的例子:
当我们在写一个和时间相关的程序的时候,我们需要通过每一次的编译和运行获得当前所处的时间,以保证我们程序的正常进行。但是如果有了make的这一项功能,我们会发现我们的代码永远得不到我们想要的结果。
但是拥有这个功能又可以很大程度上减少我们系统的占有时间,避免进行过多不必要的操作。所以就有了我们.PHONY的修饰,当我们的代码在编译的时候不想被系统所干预,就可以使用该修饰符进行修饰。
调用make指令执行相应的命令:
要想执行我们在makefile文件当中编写的命令,我们就只需要使用make指令执行,但是我们会发现的是:使用make指令执行的只是第一个可以编译的指令,如果存在依赖文件就会向后查找并执行产生依赖文件的命令。
如果想执行后面单独的命令的话就像是我们上面存在的clean指令一样,我们需要特定指出。例如:make clean之后我们的命令才可以正常运行。
相关文章:
makefile相关知识的讲解
目录 makefile文件的介绍 step1:手动创建一个makefile文件 step2:在文件当中编辑指定的命令 step3:退出makefile文件并使用make执行文件当中的命令 step4:使用clean指令清除生成的文件 makefile当中的命令编写方式 目标文件和依…...
OpenCV中的HoughLines函数和HoughLinesP函数到底有什么区别?
一、简述 基于OpenCV进行直线检测可以使用HoughLines和HoughLinesP函数完成的。这两个函数之间的唯一区别在于,第一个函数使用标准霍夫变换,第二个函数使用概率霍夫变换(因此名称为 P)。概率版本之所以如此,是因为它仅分析点的子集并估计这些点都属于同一条线的概率。此实…...
Xilinx FPGA 程序固化重新上电程序不运行的问题
问题描述 FPGA直接下载bit文件,功能正常。 FPGA擦除FLASH,烧写FLASH,正常。 电源断电,重新上电,FALSH里面的程序没有启动,FPGA程序没有跑起来。–FLASH启动不正常。 解决办法 在XDC约束文件里边增加约束: ## Configuration options, can be used for all designs se…...
c++ 使用rapidjson对数据序列化和反序列化(vs2109)
RapidJSON是腾讯开源的一个高效的C JSON解析器及生成器,它是只有头文件的C库,综合性能是最好的。 1. 安装 在NuGet中为项目安装tencent.rapidjson 2. 引用头文件 #include <rapidjson/document.h> #include <rapidjson/memorystream.h> #…...
4.迭代最近点ICP及非线性优化求解
使用非线性优化方法求解ICP 文章目录 使用非线性优化方法求解ICP前情提要ICP问题回顾对矩阵变量求导数 ICP问题的非线性解法代码示例 欢迎访问个人网络日志🌹🌹知行空间🌹🌹 前情提要 在迭代最近点算法ICP及SVD求解中介绍了ICP问…...
【redis总结】
文章目录 1、redis简介2、为什么要选择redis做缓存3、数据结构4、redis多线程模型redis6.0的变化 5、redis持久化AOF的实现过程RDB的实现过程 6、redis集群的搭建7、 redis过期删除和淘汰策略8、redis的内存淘汰策略 1、redis简介 Redis(Remote Dictionary Server&…...
图数据库:释放关系的力量
【squids.cn】 全网zui低价RDS,免费的迁移工具DBMotion、数据库备份工具DBTwin、SQL开发工具等 在数据管理领域,图数据库已经成为一种强大的工具,它彻底改变了我们处理和分析复杂关系的方式。与依赖表和列的传统关系数据库不同,图…...
Windows系统如何临时关闭“Windows安全中心实时保护”
前言 启动windows depender实时保护可能会使系统不太流畅,也可能会导致我们的程序无法正常运行,因为它会拦截或搜索我们的正常工作。 暂时关闭windows depender的实时保护对许多用户来说非常重要。 一、Win10系统关闭方法 打开Windows安全中心&#…...
二叉树MFC实现
设有一颗二叉树如下; 这似乎是一颗经常用作示例的二叉树; 对树进行遍历的结果是, 先序为:3、2、2、3、8、6、5、4, 中序为:2、2、3、3、4、5、6、8, 后序为2、3、2、4、5、6、8、3;…...
Nginx之客户并发数限制解读
目录 基本介绍 配置指令 limit_conn_zone limit_conn 其他 limit_rate limit_rate_after limit_req_zone limit_req 基本介绍 在我们进行系统开发设计中,要考虑服务器流量异常,负载过大等问题。对于大流量恶意的攻击访问,会带来带宽…...
白捡一个存储型XSS
本文由掌控安全学院 - 杳若 投稿 起因 利用fofa搜索时发现 org"China Education and Research Network Center" && body"/register" 任意用户注册 在找到该CMS的时候发现存在任意用户注册的情况 http://xxxx.edu.cn/student/Register.ashx …...
SpringMVC 学习(五)转发,重定向和传参
6. 转发和重定向 Spring MVC 的底层是 servlet,因此在 Spring MVC 中也存在转发和重定向的概念。 对于转发而言,其目的页面可以在 WEB-INF 目录下。重定向的目的页面不允许在 WEB-INF 目录下,因为重定向相当于用户再次发起一次请求…...
selenium不定位元素直接使用键盘操作(如弹框操作)
今天在使用selenium进行定位时,发现直接定位不了chrome的弹框,如这种弹框: 使用的是下面这行代码 driver.switch_to.alert.accept() 运行报错,说是没有 alert windown。。。。 啊?难道chrome的弹框不是用alert写的&…...
Inno Setup安装中文语言
以版本6.2.2为例: 默认安装的Inno Setup是不支持中文语言的,需要我们自行下载安装。 一、打开官网Inno Setup Translations (jrsoftware.org) 下载的文件如下 二、然后重命名放到Inno Setup的如下安装目录中 三、然后重启Inno Setup即可。 打包后的…...
【数据库——MySQL】(10)视图和索引
目录 1. 视图1.1 创建视图1.2 查询视图 2. 索引2.1 索引的分类2.2 索引的建立 参考书籍 1. 视图 1.1 创建视图 基础语法: CREATE [OR REPLACE] VIEW 视图名[(列名表)]ASSELECT语句[WITH CHECK OPTION]说明: 在默认情况下,将在当前数据库创…...
No servers available for service: renren…。 Gateway 网关报503错误 ,已解决
目录 环境配置问题描述loadbalancer的作用 环境配置 问题描述 配置spring cloud gateway使用端口访问就可以,使用lb:// 就报503 gateway:routes:- id: admin_routeuri: lb://gulimall-admin # uri: http://localhost:8080predicates:- Path/api/**filter…...
【Spring Cloud】深入理解 Eureka 注册中心的原理、服务的注册与发现
文章目录 前言一、微服务调用出现的问题1.1 服务消费者如何获取服务提供者的地址信息?1.2 如果有多个服务提供者,消费者该如何选择?1.3 消费者如何得知服务提供者的健康状态? 二、什么是 Eureka2.1 Eureka 的核心概念2.2 Eureka 的…...
添加路径到头文件默认搜索路径
在linux环境下写代码,出现函数是从其他文件引用的,需要把该文件的搜索路径添加到当前文件。 注意,除非必要,一般不建议这样做。比较好的方式是写入到CMakeLists或者Makefile中。 一次性生效,命令行输入即可ÿ…...
掌动智能:替代JMeter的压力测试工具有哪些
JMeter是一个广泛使用的开源压力测试工具,但在实际应用中,也有一些其他优秀的替代品可供选择。本文将介绍几个可替代JMeter的压力测试工具,它们在功能、性能和易用性方面都具有独特优势,可以满足不同压力测试需求的选择。 一、Gat…...
Casper Network 构建企业级区块链生态的野望
Casper Network 是基于 Layer1 且图灵完备 Wasm 的智能合约平台,它由唯一可操作的 CBC-Casper Proof-of-Stake (PoS) 共识算法(称为 Highway)支持,该网络是一个无需许可、去中心化的公共区块链。 Casper Network 主网在 2021 年 4…...
TiDB 7.1.0 LTS 特性解读丨关于资源管控 (Resource Control) 应该知道的 6 件事
TiDB 7.1.0 LTS 在前段时间发布,相信很多同学都已经抢先使用了起来,甚至都已然经过一系列验证推向了生产环境。面对 TiDB 7.1 若干重要特性,新 GA 的资源管控 (Resource Control) 是必须要充分理解、测试的一个重量级特性。对于常年奋斗在一线…...
Django Web开发入门基础
官方有很详细的文档,但是看过几遍之后如果要翻找还是有点麻烦,本文算作是学习笔记,提取一些关键点记录下来,另附上官方教程 编写你的第一个 Django 应用 注: 文中的指令使用py,是在Windows上,ma…...
Baumer工业相机堡盟工业相机如何通过BGAPI SDK设置相机的图像剪切(ROI)功能(C#)
Baumer工业相机堡盟工业相机如何通过BGAPI SDK设置相机的图像剪切(ROI)功能(C#) Baumer工业相机Baumer工业相机的图像剪切(ROI)功能的技术背景CameraExplorer如何使用图像剪切(ROI)功…...
LetCode算法题---第2天
注:大佬解答来自LetCode官方题解 80.删除有序数组的重复项Ⅱ 1.题目 2.个人解答 var removeDuplicates function (nums) {let res [];for (let index 0; index < nums.length; index) {let num 0;if (res.includes(nums[index])) {for (let i 0; i < res.length; …...
Leetcode.2571 将整数减少到零需要的最少操作数
题目链接 Leetcode.2571 将整数减少到零需要的最少操作数 rating : 1649 题目描述 给你一个正整数 n n n ,你可以执行下述操作 任意 次: n n n 加上或减去 2 2 2 的某个 幂 返回使 n n n 等于 0 0 0 需要执行的 最少 操作数。 如果 x 2 i x 2^…...
微前端无界 项目使用记录
1预期目标和场景 一个vue框架开发的应用,需要使用另一个系统的页面。 通俗来说,就是在一个web应用中独立的运行另一个web应用 2 技术支持 微前端处理方案:无界 无界官网: https://wujie-micro.github.io/doc/guide/ CSDN 参考…...
CDH 6.3.2升级Flink到1.17.1版本
CDH:6.3.2 原来的Flink:1.12 要升级的Flink:1.17.1 操作系统:CentOS Linux 7 一、Flink1.17编译 build.sh文件: #!/bin/bash set -x set -e set -vFLINK_URLsed /^FLINK_URL/!d;s/.*// flink-parcel.properties FLI…...
基于谷歌Transeformer构建人工智能问答系统
目录 1 项目背景 2 关键技术 2.1 Transeformer模型 2.2 Milvus向量数据库 3 系统代码实现 3.1 运行环境构建 3.2 数据集介绍 3.3 预训练模型下载 3.4 代码实现 3.4.1 创建向量表和索引 3.4.2 构建向量编码模型 3.4.3 数据向量化与加载 3.4.4 构建检索web 3.5 运行结…...
【2023年11月第四版教材】第15章《风险管理》(合集篇)
第15章《风险管理》(合集篇) 1 章节说明2 管理基础2.1 风险的属性2.2 风险的分类★★★2.3 风险成本★★★2.4 管理新实践 3 管理过程4 管理ITTO汇总★★★5 过程1-规划风险管理6 过程2-识别风险6.1 识别风险★★★6.2 数据收集★★★6.3 数据分析★★★…...
python常见面试题四
解释 Python 中的魔术方法 (magic methods)。 答:魔术方法是以双下划线 __ 开头和结尾的方法,用于在特定条件下自动调用。例如,__init__ 是用于初始化对象的魔术方法。 解释 Python 中的装饰器 (decorator)。 答:装饰器是一种特殊…...
静态页面网站怎么做/电子营销主要做什么
互联网的核心是一系列协议,总称为“互联网协议”。它们对电脑如何连接和组网,做出来详尽的规定。理解了这些协议,就是理解了互联网的原理。 在面试或者工作过程中,我们对我们知道的网络协议侃侃而谈,五层模型…...
yyf做的搞笑视频网站/网络营销策略分析
Apache与nginx的对比 Apache:select模型(类似于同步)高并发的时候占用资源较多。 Nginx:epoll模型()类似于异步),对小文件并发有很大优势,大文件并发上一般,…...
怎么做兼职类网站/seo优化工作怎么样
//一个游戏,前二十关是每关自身分数,21-30每关10分;31-40每关20;41-49每关30;50关100分 //输入你的关卡数,输出现在的分数 //两种做法:if 嵌套 for || for 嵌套 if //第一种:if 嵌套…...
网站对公司的重要性/搜索引擎关键词广告
Python提供了一些内建函数用于基本对象类型:cmp(),repr(),str(),type()和等同于repr()的( )操作符 (1)type&am…...
公司官网怎么建立/seo 网站推广
各国央行应如何应对数字技术的挑战?这已成为一个紧迫的问题。部分原因是,各国央行和政府都必须掌控这个私营货币泛滥的新蛮荒时代。现在,它们必须推出自己的数字货币。 试想在不使用纸币的情况下,所有的付款行为将如何实现&#…...
微视看视频领红包下载安装/优化品牌seo关键词
Java内部类的四种分类以及作用 总结: 内部类分别有成员内部类、静态内部类、局部内部类、匿名内部类。为什么使用内部类? 1、封装性,对访问权限做限制。 2、实现多继承,每个内部类可以继承一个父类。 3、解决继承及实现接口出现同…...