Linux_make/Makefile的理解

1.make是一个命令,makefile是一个文件, 依赖关系和依赖方法.

a.快速使用一下 

i.创建一个Makefile文件(首字母也可以小写)

b.依赖关系和依赖方法

i.依赖关系: 我为什么要帮你? mybin:mytest.c

ii.依赖方法: 怎么帮? gcc -o mybin mytest.c

 make之前要注意先创建一个mytest.c文件写好我们要运行的内容.

写入一些简单的内容主要是先跑通Makefile​​

iii.可以make了

这时候他自动的就能帮我们编译把源文件编译形成一个可执行程序.

c.make和makefile 修改文件内容才更新

i.基本语法

①怎么清理这个临时文件(mybin)呢?

项目的自动化构建和自动化清理

此时我们发现已经没有mybin的文件了.

如果clear和mybin互相换位子会发生什么呢?make是clear. make mybin才是生成.

③总结: 

①Makefile和make 形成目标文件的时候,默认是从上到下扫描makefile文件的, 默认形成的是第一个目标文件

②默认只形成一个

ii. make和makefile怎么知道可执行程序是比较新的呢?

这个是通过对比时间比出来的,只要可执行程序的最近修改时间比所有源文件的最近修改时间新,说明它就是最新的.

源代码和可执行程序谁比较新,如果原代码比较新就可以更新,如果可执行程序比较新就会Makefile成功 


2. 认识一下时间

a. 文件 = 内容(modify)+属性(change)

b.查看这些修改等时间的指令:

state mytest.c(这里用mytest.c举例)

各个单词带表的含义:

Modify -- 内容(修改时间)

Change ---属性(改变)

Modify修改change也会跟着变,change变可能单独变

Access -(访问)  : 特殊阶段更新

对比Modify最好,因为 touch mytest.c (更新文件对应的时间)


3.有没有一个方法能让我不用每次访问都touch?答案是: 有.

a.这里要介绍一下 PHONY 的使用了

i..PHONY:mybin # 修饰对应的mybin目标文件,成为一个伪目标,总是被执行.

ii.一般推荐把clean设置成伪目标.

同时为了养成良好的习惯,这里还要用一下类似于宏的操作:

至少也要这样这里用的是mytest.c举例.

$@: 代表目标文件

$^: 代表对应的依赖文件列表

 到这里就结束啦, 谢谢观看!

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

探索LLM世界:新手小白的学习路线图

随着人工智能的发展,语言模型(Language Models, LLM)在自然语言处理(NLP)领域的应用越来越广泛。对于新手小白来说,学习LLM不仅能提升技术水平,还能为职业发展带来巨大的机遇。那么,…

CycloneIV 使用MAX7219驱动数码管

MAX7219驱动数码管的代码,C语言有大把的代码参考,实现的原理这里我就不细说了,其他博主说得很详细,但是Verilog的代码并没有很多,因此,这里我封装好了代码,仅需根据自己的需要去配置就可以 mod…

Linux(虚拟机)的介绍

Linux介绍 常见的操作系统 Windows:微软公司开发的一款桌面操作系统(闭源系统)。版本有dos,win98,win NT,win XP , win7, win vista. win8, win10,win11。服务器操作系统:winserve…

Linux中将文件解压到指定目录

在Linux中,你可以使用以下命令将压缩文件解压到指定的目录: 对于.tar文件: tar -xvf archive.tar -C /path/to/directory这里的archive.tar是你要解压的.tar文件,/path/to/directory是你想要解压到的目标目录。 对于.tar.gz或.…

conda issue

Conda 是一个跨平台、通用的二进制包管理器。它是 Anaconda 安装使用的包管理器,但它也可能用于其他系统。Conda 完全用 Python 编写,并且是 BSD 许可的开源。通用意味着大部分的包都可以用它进行管理,很像一个跨平台版本的apt或者yum&#x…

vue3 父组件 props 异步传值,子组件接收不到或接收错误

1. 使用场景 我们在子组件中通常需要调用父组件的数据,此时需要使用 vue3 的 props 进行父子组件通信传值。 2. 问题描述 那么此时问题来了,在使用 props 进行父子组件通信时,因为数据传递是异步的,导致子组件无法成功获取数据…

汇川CodeSysPLC教程03-2-6 ModBus TCP

什么是ModBus TCP? ModBus TCP是一种基于TCP/IP协议的工业网络通信协议,常用于工业自动化和控制系统。它是ModBus协议的一个变种,ModBus协议最初由Modicon(现在是施耐德电气的一部分)在1979年开发。 以下是ModBus TC…

【gradle】在test apk中定义SDK编译和拷贝任务

// 定义一个任务来编译 AAR 并拷贝到自定义位置 tasks.register(‘compileAndCopyAAR’) { exec { commandLine ‘cmd’, “/c”, “cd …/…/ &&” ‘gradlew SDK:assembleRelease’ } copy {from("../../SDK/build/outputs/aar/") {include SDK-release.…

数据治理之“财务一张表”

前言 信息技术的发展,伴随企业业务系统的纷纷建设,提升业务处理效率的同时,也将企业的整体主价值链流程分成了一段一段的业务子流程,很多情况下存在数据上报延迟、业务协作不顺畅、计划反馈不及时、库存积压占资多……都可以从数据…

【Android】linux

android系统就是跑在linux上的系统。Linux层里面包含系统和硬件驱动等一些本地代码的环境。 linux的目录 mount: 用于查看哪个模块输入只读,一般显示为: [rootlocalhost ~]# mount /dev/cciss/c0d0p2 on / type ext3 (rw) proc on /proc type proc (…

Spring AI (五) Message 消息

5.Message 消息 在Spring AI提供的接口中,每条信息的角色总共分为三类: SystemMessage:系统限制信息,这种信息在对话中的权重很大,AI会优先依据SystemMessage里的内容进行回复; UserMessage:用…

IM聊天代码

客户端 Headers inet inet.h #pragma once #include<Winsock2.h>//#pragma comment(lib,"Ws2_32.lib")class INetMediator; class INet { public:INet(){}virtual ~INet(){}//初始化网络virtual bool initNet() 0;//接收数据virtual void recvData() 0;…

每日一知识点 - Java Lambda 表达式

目录 &#x1f4dd; 每日一知识点Lambda 表达式1、基本概念2、使用示例 &#x1f4ce; 参考文章 &#x1f600; 准备好了吗&#xff1f;让我们一起步入这座Java神奇的城堡&#xff0c;揭开Java Lambda 表达式的神秘面纱&#xff0c;探索其中的奥秘。 &#x1f4dd; 每日一知识点…

PlatformIO+ESP32S3学习:驱动WS2812矩阵彩灯显示FFT音律拾音灯

本文继承自之前的彩灯驱动文章&#xff1a;https://blog.csdn.net/qq_51930953/article/details/140736628 本文完成的效果&#xff1a; 1. 硬件准备 1.1. WS2812矩阵彩灯 购买地址&#xff1a;WS2812B全彩软像素屏8X8 8X32 16X16幻彩5V显示可编程像素软屏 1.2. 麦克风模块 购…

Ip2region - 基于xdb离线库的Java IP查询工具提供给脚本调用

文章目录 Pre效果实现git clone编译测试程序将ip2region.xdb放到指定目录使用改进最终效果 Pre OpenSource - Ip2region 离线IP地址定位库和IP定位数据管理框架 Ip2region - xdb java 查询客户端实现 效果 最终效果 实现 git clone git clone https://github.com/lionsou…

YOLOV8源码解读-C2f模块-以及总结c2模块、Bottleneck

c2f模块是对c2模块的改进 c2模块图解解读 先给出YOLOV8中卷积的定义模块一键三连-卷积-BN-激活函数 def autopad(k, pNone, d1): # kernel, padding, dilation"""Pad to same shape outputs."""if d > 1:k d * (k - 1) 1 if isinstance…

洛谷 P7771:【模板】欧拉路径

【题目来源】https://www.luogu.com.cn/problem/P7771【题目描述】 求有向图字典序最小的欧拉路径。【输入格式】 第一行两个整数 n,m 表示有向图的点数和边数。 接下来 m 行每行两个整数 u,v 表示存在一条 u→v 的有向边。【输出格式】 如果不存在欧拉路径&#xff0c;输出一行…

在模型中bert和transform讲解

在自然语言处理&#xff08;NLP&#xff09;领域&#xff0c;BERT 和 Transformer 是两个非常重要的概念。下面是它们的简要解释&#xff1a; 一 、BERT BERT&#xff08;Bidirectional Encoder Representations from Transformers&#xff09;是由Google提出的一种预训练语言…

Docker与Kubernetes在Java微服务中的应用

引言 随着微服务架构的普及,容器化技术成为部署和管理微服务的重要手段。Docker 提供了一种轻量级的容器解决方案,而 Kubernetes 则成为了容器编排和管理的事实标准。本文将深入探讨如何将 Java 微服务容器化,并在 Kubernetes 上部署和管理这些服务。 容器化概述 1. 容器…

Linux:进程信号(二.信号的保存与处理、递达、volatile关键字、SIGCHLD信号)

上次介绍了&#xff1a;(Linux&#xff1a;进程信号&#xff08;一.认识信号、信号的产生及深层理解、Term与Core&#xff09;)[https://blog.csdn.net/qq_74415153/article/details/140624810] 文章目录 1.信号保存1.1递达、未决、阻塞等概念1.2再次理解信号产生与保存1.3信号…