当前位置: 首页 > news >正文

Linux自动化构建项目工具——Makefile/makefile

目录

一,背景知识

二,makefile/Makefile的编写

1.创建makefile/Makefile文件

 2.在Makefile文件里写编译代码

3.伪目标——.PHONY

1.伪目标的特点

 2.怎样实现总是被执行

4.Makefile/makefile文件的不同编写风格

1.背景知识

2.改写


一,背景知识

首先我们要分清楚的便是这两个东西的本质区别。我们要明确的便是:

1.make是一个命令

2.makefile/Makefile是一个具有特定格式的文本文件。

在Linux下一个程序员是否会使用Makefile/makefile决定了这个程序员是否具备构建大项目的能力。

二,makefile/Makefile的编写

1.创建makefile/Makefile文件

在想要使用这个工具来达到我们的目的时首先便要创建一个文本文件。这个文本文件只能叫做makefile/Makefile。若是文件名字错了这个工具便是不能被使用的。创建文件:

一般在使用这个工具时创建的是Makefile。

 2.在Makefile文件里写编译代码

1.准备工作:在往Makefile文件里写指令时首先便要写的便是依赖关系。这个依赖关系指的便是源文件与目标文件的关系。目标文件的生成靠的就是源文件。所以我们要先写一个源文件。

所以我们首先写一个源文件并在里面写上一些代码:

接下来便是写Makefile文件的内容了,代码如下:

在这个代码里面这几条代码的对应关系如下:

当我们运行时使用一个make便可以编译文件text.c:

当要清除这个文件时便要用到指令make clean:

在这里如果你想不想要显示make与make clean下面的指令的话便可以在指令前面加上一个@:

之后使用make与make clean指令时便是这样的:

3.伪目标——.PHONY

1.伪目标的特点

1.首先我们要知道的便是伪目标是没有依赖关系的,所以前面的clean是这样子写的:

2.伪目标文件是总是被执行的。比如我的make指令在创建完了一个目标文件后若再次想重新编译便会出现这样的情况:

但是伪目标clean便可以多次执行而不会报错:

 2.怎样实现总是被执行

.PHONY:实现总是被执行的的操作的方法便是不管文件是否修改都要访问磁盘。

这里的修改包括属性修改与内容修改。那我们怎么判断文件是否被修改呢?答案便是通过文件的修改时间判断文件新旧然后判断是否被修改。这里的时间便是ACM时间。可以用指令stat+文件名查看:

这ACM时间便对应的是Access ,Modify,Change时间。在这里Modify时间表示的是文内容被修改的时间,Change表示文件属性被修改的时间。在这些时间里只有Modify时间是牵一发而动全身的,Access时间有可能访问好几次都不变,Change时间就比较随意了。

4.Makefile/makefile文件的不同编写风格

1.背景知识

1.在Makefile文件下可以定义变量名。

2.在Linux下$()有解释括号呢放入的变量内容的作用。

2.改写

在知道上面的两个特性以后便可以将Makefile文件的代码改为如下代码:

解释:

在这里再补充一点,$@可以表示冒号左边的变量,$^可以表示冒号右边的变量,所以这个代码又可以改写成为如下版本:

下面的是不能改的,因为clean的冒号两边没有文件。

相关文章:

Linux自动化构建项目工具——Makefile/makefile

目录 一,背景知识 二,makefile/Makefile的编写 1.创建makefile/Makefile文件 2.在Makefile文件里写编译代码 3.伪目标——.PHONY 1.伪目标的特点 2.怎样实现总是被执行 4.Makefile/makefile文件的不同编写风格 1.背景知识 2.改写 一,背…...

第11章 字符串和字符串函数

本章介绍以下内容: 函数:gets()、gets_s()、fgets()、puts()、fputs()、strcat()、strncat()、strcmp()、strncmp()、strcpy()、strncpy()、sprintf()、strchr() 创建并使用字符串 使用C库中的字符和字符串函数,并创建自定义的字符串函数 使用…...

TypeScript项目配置

前言 我们需要建立tsconfig.json 作用 用于标识 TypeScript 项目的根路径; 用于配置 TypeScript 编译器; 用于指定编译的文件。 重要字段 files - 设置要编译的文件的名称; include - 设置需要进行编译的文件,支持…...

【Spring面试】二、BeanFactory与IoC容器的加载

文章目录 Q1、BeanFactory的作用是什么?Q2、BeanDefinition的作用是什么?Q3、BeanFactory和ApplicationContext有什么区别?Q4、BeanFactory和FactoryBean有什么区别?Q5、说下Spring IoC容器的加载过程(※)Q…...

Android嵌套事务

这时候旋转设备还是会重置秒表。旋转设备时Android会重新创建活动。如果你的活动包含一个 < fragment >元素&#xff0c;每次重新创建活动时&#xff0c;它会重新插入片段的一个新版本。老片段被丢掉&#xff0c;所有实例变量会设置其初始值。在这个特定的例子中&#xf…...

如何让项目准时上线?

项目为什么容易延期&#xff1f; 1、软件研发是一项创造性工作 项目延期是一种普遍现象&#xff0c;管理者最为头疼的一个问题。但是外人并不理解。明明是你们自己做的计划&#xff0c;怎么总会出现这么多问题。说到底&#xff0c;这是由于我们的工作特性决定的。我们做的是一…...

ChatGPT 和 Elasticsearch:APM 工具、性能和成本分析

作者&#xff1a;LUCA WINTERGERST 在本博客中&#xff0c;我们将测试一个使用 OpenAI 的 Python 应用程序并分析其性能以及运行该应用程序的成本。 使用从应用程序收集的数据&#xff0c;我们还将展示如何将 LLMs 成到你的应用程序中。 在之前的博客文章中&#xff0c;我们构建…...

不使用辅助变量的前提下实现两个变量的交换

package operator; //不用第三个辅助变量&#xff0c;实现两个数的交换 public class Demo08 {public static void change(int a, int b){a ab;b a-b;a a-b;System.out.println(a);System.out.println(b);}public static void main(String[] args) {change(900,3000);} }后续…...

SV-DJS-i13电梯对讲网关

SV-DJS-i13电梯对讲网关 DJS-I13 是一款主要应用于电梯场景的对讲设备&#xff0c;可以将电梯原有模拟通话器的模拟信号转换成数字信号&#xff0c;不仅有稳定性好、电信级音质的优点&#xff0c;且完美兼容当下所有基于SIP的主流IPPBX/软交换/IMS平台,如Asterisk, Broadsoft,…...

论文解析-基因序列编码算法DeepSEA

论文解析-DeepSEA 参考亮点功能 方法数据集来源数据 实验评估评估DeepSEA预测染色质特征的性能评估DeepSEA在变异序列上的DHS预测性能数据集结果 参考 Zhou, J., Troyanskaya, O. Predicting effects of noncoding variants with deep learning–based sequence model. Nat Me…...

计组与操作系统

非科班出身的程序员&#xff0c;还是得补一下相关理论课程&#xff0c;最近看了下九曲阑干关于CSAPP的视频&#xff0c;学习了一下计算机组成原理&#xff0c;这里列一下相关知识点。 计算机组成原理&#xff1a; 数的表示与运算&#xff1a;CSAPP第二章 指令系统&#xff0…...

Pytorch中张量矩阵乘法函数(mm, bmm, matmul)使用说明,含高维张量实例及运行结果

Pytorch中张量矩阵乘法函数使用说明 1 torch.mm() 函数1.1 torch.mm() 函数定义及参数1.2 torch.bmm() 官方示例 2 torch.bmm() 函数2.1 torch.bmm() 函数定义及参数2.2 torch.bmm() 官方示例 3 torch.matmul() 函数3.1 torch.matmul() 函数定义及参数3.2 torch.matmul() 规则约…...

如何在matlab绘图的标题中添加变量?变量的格式化字符串输出浅析

文章目录 matlab的格式化输出控制符字段宽度、精度和对齐方式的控制matlab的格式化输出总结 matlab的格式化输出控制符 Matlab在画图的时候&#xff0c;采用title函数可以增加标题&#xff0c;该函数的输入是一个字符串&#xff0c;有时候我们想在字符串中添加一些变量&#x…...

Spring MVC 八 - 内置过滤器

SpringMVC内置如下过滤器&#xff1a; Form DataForwarded HeadersShallow ETagCORS Form Data 浏览器可以通过HTTP GET或HTTP POST提交form data&#xff08;表单数据&#xff09;&#xff0c;但是非浏览器客户端可以通过HTTP PUT、HTTP DELETE、HTTP PATCH提交表单数据。但…...

@Change监听事件与vue监听属性:watch的区别?

change 和 watch 是 Vue 中用于处理数据变化的两种不同方式。 1. change: - change 是一个事件监听器&#xff0c;用于监听特定DOM元素的变化事件&#xff0c;通常用于表单元素&#xff08;如输入框、下拉框等&#xff09;的值变化。 - 它在用户与表单元素交互并提交了变化时触…...

C++面试记录之中望软件

上次面试体验不好&#xff0c;记录了&#xff0c;这次同样记录一次体验不好的面试&#xff0c;中望软件…直接写了名字&#xff0c;因为真的很无语&#x1f613; 记录一下我不知道的问题 忘记录音了&#x1f622; 1. main函数之前做了什么&#xff1f; 我&#xff1a;实话我…...

多功能翻译工具:全球翻译、润色和摘要生成 | 开源日报 0914

openai-translator/openai-translator Stars: 18.1k License: AGPL-3.0 这个项目是一个多功能翻译工具&#xff0c;由 OpenAI 提供支持。 可以进行全球单词翻译、单词润色和摘要生成等操作提供三种模式&#xff1a;翻译、润色和摘要支持 55 种不同语言的互相转换支持流模式允…...

在 Vue.js 中,使用 watch 监听data变量如:对象属性/data变量

watch 监听对象属性 在 Vue.js 中&#xff0c;使用 watch 监听对象属性的变化时&#xff0c;应该将属性名作为字符串传递给 watch 选项。 示例如下&#xff1a; javascript watch: {addform.isCheck1: function(newValue) {console.log(newValue);var quantity this.addform…...

vue中预览xml并高亮显示

项目中有需要将接口返回的数据流显示出来&#xff0c;并高亮显示&#xff1b; 1.后端接口返回blob,类型为xml,如图 2.页面中使用pre code标签&#xff1a; <pre v-if"showXML"><code class"language-xml">{{xml}}</code></pre> …...

MFC中嵌入显示opencv窗口

在MFC窗体中建立一个Picture Control控件,用于显示opencv窗口 在属性中设置图片控件的资源ID为IDC_PIC1 主要的思路: 使用GetWindowRect可以获取图片控件的区域 使用cv::resizeWindow可以设置opencv窗口的大小,适合图片控件的大小 使用cvGetWindowHandle函数可以获取到ope…...

金鸣识别网页版:轻松实现表格识别的神器

来百度APP畅享高清图片 金鸣识别网页版是一款功能强大的在线识别工具&#xff0c;它可对图片或PDF中的表格文本内容进行识别&#xff0c;还支持各种证票的结构化识别。以下是以表格识别为例&#xff0c;对金鸣识别网页版的操作说明进行详细介绍&#xff1a; 首先&#xff0c;打…...

DasViewer可以设置打开指定文件吗?

答&#xff1a;会员可以。工具里面选择坐标转换&#xff0c;输入源数据&#xff0c;设置好源坐标和目标坐标以及路径。根据两张坐标系的性质选择转换方式。 DasViewer是由大势智慧自主研发的免费的实景三维模型浏览器,采用多细节层次模型逐步自适应加载技术,让用户在极低的电脑…...

uniapp微信小程序用户隐私保护指引弹窗组件

<template><view v-if"showPrivacy" :class"privacyClass"><view :class"contentClass"><view class"title">用户隐私保护指引</view><view class"des">感谢您选择使用我们的小程序&am…...

Java的反射应用(Method和Class)

记录&#xff1a;473 场景&#xff1a;使用java.lang.reflect.Method和java.lang.Class类&#xff0c;根据Java反射原理实现使用指定字符串类名和方法名称&#xff0c;调用对应对象和对应方法。 版本&#xff1a;JDK 1.8。 1.使用Java反射调用指定类的指定方法 (1)参数说明…...

Java之泛型系列--Class使用泛型的方法(有示例)

原文网址&#xff1a;Java之泛型系列--Class使用泛型的方法(有示例)_IT利刃出鞘的博客-CSDN博客 简介 本文用示例介绍Java在方法前加泛型的使用。 类类型的写法 对象所对应的类的泛型写法 Class classAClass<T> classAClass<?> classB Class与Class<?&g…...

【【无用的知识之串口学习】】

无用的知识之串口学习 USART串口协议 •通信的目的&#xff1a;将一个设备的数据传送到另一个设备&#xff0c;扩展硬件系统 •通信协议&#xff1a;制定通信的规则&#xff0c;通信双方按照协议规则进行数据收发 就是我们并不能在芯片上设计完全部的一下子完成所有的设计&am…...

9月13日上课内容 第三章 ELK日志分析系统

本章结构 ELK日志分析系统简介 ELK日志分析系统分为 Elasticsearch Logstash Kibana 日志处理步骤 1.将日志进行集中化管理 2.将日志格式化(Logstash) 并输出到Elasticsearch 3.对格式化后的数据进行索引和存储 (Elasticsearch) 4.前端数据的展示(Kibana) Elasticsearch介…...

不知道有用没用的Api

encodeURIComponent(https://www.baidu.com/?name啊啊啊) decodeURIComponent(https%3A%2F%2Fwww.baidu.com%2F%3Fname%3D%E5%95%8A%E5%95%8A%E5%95%8A) encodeURI(https://www.baidu.com/?name啊啊啊) decodeURI(https://www.baidu.com/?name%E5%95%8A%E5%95%8A%E5%95%8A) …...

(2023,LENS 视觉模型 LLM)迈向可见的语言模型:通过自然语言的镜头来看计算机视觉

Towards Language Models That Can See: Computer Vision Through the LENS of Natural Language 公众号&#xff1a;EDPJ&#xff08;添加 VX&#xff1a;CV_EDPJ 进交流群获取资料&#xff09; 目录 0. 摘要 1. 简介 2. 相关工作 2.1 大语言模型能力 2.2 解决视觉和…...

线段树上树剖再拿线段树维护:0914T4

cp 一种常见套路&#xff1a; 如果在线段树上进行一段区间修改&#xff0c;那么必然是一段右节点一段左节点 这个过程其实就是zkw的本质 下面都要用zkw来理解 考虑原题&#xff0c;有一棵不规则的线段树 类似zkw&#xff0c;在这类题目中&#xff0c;我们要先把开区间变成闭…...

建设网站明细报价表/柳州今日头条新闻

Theano 学习笔记(一)theano为什么要定义共享变量&#xff1f; 定义共享变量的原因在于GPU的使用&#xff0c;如果不定义共享的话&#xff0c;那么当GPU调用这些变量时&#xff0c;遇到一次就要调用一次&#xff0c;这样就会花费大量时间在数据存取上&#xff0c;导致使用GPU代码…...

网站建设方案流程/微博上如何做网站推广

从事人力资源工作很多年了&#xff0c;多多少少积累了一些经验。已经有许多同仁发表文章&#xff0c;讲了如何撰写简历&#xff0c;面试的礼仪要求等&#xff0c;珠玉在前&#xff0c;不再赘言。适逢2009届大学毕业生进入求职阶段&#xff0c;特此针对面试环节谈一些看法&#…...

wordpress4.7.5中文版/优化seo可以从以下几个方面进行

1.JVM运行区域内存划分 2.各内存区域详细介绍 2.1 程序计数器 程序计数器是一块很小的内存区域&#xff0c;它作为前线程所执行的字节码的行号指示器&#xff0c;指向当前class文件的执行代码的行数。字节码解释器工作时&#xff0c;通过改变程序计数器的数值&#xff0c;来选取…...

电子商务网站设计是什么/连云港seo优化公司

经常有新手配置基于svnserve的subversion服务器后&#xff0c;在客户端访问subversion版本库时出现这个错误&#xff1a;svnserve.conf:12: Option expected为什么会出现这个错误呢&#xff0c;就是因为subversion读取配置文件svnserve.conf时&#xff0c;无法识别有前置空格的…...

淄博网站制作形象/seo单词优化

1.获取所有数据库名 --SELECT Name FROM Master..SysDatabases ORDER BY Name -- 2.获取所有表名: --SELECT Name NAMEtemp,* FROM TEST..SysObjects Where XTypeU ORDER BY Name --表名 ----XTypeU:表示所有用户表; ----XTypeS:表示所有系统表; 3.获取所有字段名: SELECT Nam…...

政府网站栏目架构/百度引流免费推广怎么做

tddl的使用资料 http://udn.yyuap.com/thread-38157-1-1.html转载于:https://www.cnblogs.com/123cn/p/5900786.html...