make makefile

news2024/11/27 18:44:01

文章目录

    • make是一个命令
    • makefile or Makefile是一个当前目录下的文件
    • 使用:
      • 生成可执行文件
      • 清理
    • 作用
    • 依赖关系
    • 依赖方法
    • make会自动推导makefile中的依赖关系栈式结构
    • 为什么清理的时候要make 加上clean?
      • make后面可以直接跟要生成的可执行文件,指定名称的依赖关系和依赖方法
    • 为什么make了一次之后就不能继续make了?怎么做到的?
      • 结论
    • 新指令 stat + 文件名
      • touch + 文件名
      • 回顾文件
    • 小细节

make是一个命令

makefile or Makefile是一个当前目录下的文件

makefile

mytest.exe:code.c
  2     gcc -o mytest.exe code.c
  3 .PHONY:clean
  4 clean:
  5     rm -f mytest.exe      

使用:

生成可执行文件

在这里插入图片描述

清理

在这里插入图片描述

作用

当有多个源文件时,使用make和makefile来帮助我们进行自动化编译,也就是用一个make和make c lean帮助程序员从繁琐的gcc或者g++的命令中解脱

依赖关系

举个例子:你给你爸爸打电话要钱,你是你爸爸的儿子,你依赖于你爸爸,这就是类似的依赖关系

依赖方法

你找你爸爸的目的是啥? 要钱
则mytest.exe依赖code.c生成,要gcc生成对应的可执行程序
在这里插入图片描述

make会自动推导makefile中的依赖关系栈式结构

故意再makefile文件中将gcc 生成i s o 文件过程都写出来
在这里插入图片描述

要形成mecode就需要mycode.o
要形成.o文件需要.s
要形成.s文件需要.i
要形成.i文件需要.c
我们目录里只有.c,那么这种向下递归寻找到.c,.c就是递归出口,再返回到上面生成中间文件
所以makefile中最终要生成的mycode会根据它所依赖的文件依次的去后面寻找后面的内容

在这里插入图片描述

即使是makefile顺序乱序也可以,不影响
在这里插入图片描述
在这里插入图片描述
实际开发不需要这么复杂。

为什么清理的时候要make 加上clean?

clean不依赖于任何
他的依赖方法就是清理 rm

如果把clean放到makefile的最开头,那么 make 会自顶向下对makefile进行扫描,把所要形成的第一个目标文件,充当为make的默认动作,谁在前面,直接make就是默认动作

make后面可以直接跟要生成的可执行文件,指定名称的依赖关系和依赖方法

make clean or make mycode

为什么make了一次之后就不能继续make了?怎么做到的?

现象
在这里插入图片描述

结论

一般比较文件的modify时间看是否新于可执行文件的modify时间,判断是否make生成
在这里插入图片描述
make会根据源文件和目标文件的新旧,判定是否需要重新执行依赖关系进行编译!
不一定总是执行的!

我要想让依赖关系总是被执行呢??
.PHONY:伪目标
在这里插入图片描述
但是不建议让生成可执行文件总是被执行

建议把clean加上总是被执行
clean不一定只做删除rm操作,可能会做其他清理操作,其他的操作不一定总是执行
在这里插入图片描述

新指令 stat + 文件名

在这里插入图片描述

查看一个文件的access , modify , change的三个时间
access:最近一次 文件被访问的时间 (cat vim 增删改)频率最高但实验不这样
modify:最近修改文件内容的时间
change:最近修改文件属性的时间

如果修改了文件内容,文件属性也需要更改(文件大小),而打开此文件,access也修改

但实际上access在理论上修改频率应该是最高的
但是文件存在磁盘上,多次访问必定造成效率下降
则access更新策略改为 ,计数器,访问5次会更改,或者modify几次和change几次会更改

touch + 文件名

touch一个存在的文件 ,强制更新文件的三个ACM时间

touch -m  //改modify
touch -a  //改access

在这里插入图片描述

回顾文件

文件属性 去 Linux-权限回顾

在这里插入图片描述

小细节

在这里插入图片描述

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

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

相关文章

Python第二天之容器学习

1.List 容器无非就增删改查 1.添加 name_list [aaa,bbb,ccc,ddd] name_list.append(b1) name_list.insert(1,xxx) print(name_list)append 是在后面追加 而insert是自己定义下表插入 name_list [aaa,bbb,ccc,ddd] name_list2 [qqq,222,111] name_list.extend(name_list…

python 面向对象编程

文章目录 前言如何理解面向对象编程在 python 中如何使用面向对象编程定义类创建对象self添加和获取对象属性添加属性类外添加属性类中添加属性 访问属性类外访问属性类中访问属性 魔法方法__ init __() 方法__ str __()方法__ del __() 方法 前言 大家好,前面我们…

吐血整理,自动化测试Yaml框架配置文件-深入详解(超细)

目录:导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结(尾部小惊喜) 前言 YAML详解 YAML它…

上位机智能通信统一解决方案OPC应用

上位机应用开发中的通信需求 通信过程/通信协议多样性 通信统一化处理方案:OPC(Open Platform Communications)、OPC UA(OPC Unified Architecture) 基于西门子1500PLC的OPC服务器对接 internal class Program{stati…

BTP Integration Suite学习笔记 - (Unit1) Developing with SAP Integration Suite

今天决定跟着SAP官方资源系统学习一遍BTP Itegration Suite。找到两个Learning Journey: SAP Integration Suite Foundation 和 Solution Integration on SAP BTP。还有一个更大的roadmap,Integration Suite的官方内容在这里都可以链接到。 认证暂时只找到了一个比较基础的&…

干撸Spring,太难了!阿里P8级别「Spring源码全解析」带你起飞

有朋友跟我反映说,最近想详细学习Spring源码,可网上查到的文章都很一般,有没有大牛分享自己Spring实践与源码结合的方法? 干撸Spring,太难了!难到你不知道从哪下手! 为什么 Spring 天天用&…

云和DevOps如何帮助加速数字化转型?

1.云和 DevOps:概述 数字化转型已成为寻求在现代时代蓬勃发展的企业的一项关键举措。为了加速这一转型,组织正在利用云计算的力量并采用DevOps实践。云计算提供可扩展且灵活的基础架构,而 DevOps 则支持协作和持续交付的文化。本文将探讨云和…

ETHERCAT转PROFIBUS网关连接ethercat网线接口定义

远创智控YC-DP-ECT,是自主研发的一款PROFIBUS从站功能的通讯网关,它的主要功能是将ETHERCAT设备接入到PROFIBUS网络中。 YC-DP-ECT这个小小的网关可不简单, 连接到PROFIBUS总线中做为从站使用,连接到ETHERCAT总线中做为从站使用…

实现企业安全云转型的思考

如今大部分企业都在开展数字化数字化转型,云计算一直在其中起着主导地位,因而组织面临着双重挑战:如何将业务无缝迁移至云上,并确保这种转型的安全。 虽然云的使用保证了可扩展性、成本效率和生产力的提高,但上云过程…

【C++顺序容器】deque的成员函数和非成员函数

目录 deque 1. deque的成员函数 1.1 构造、析构和赋值运算符重载 1.1.1 构造函数 1.1.2 析构函数 1.1.3 赋值运算符重载 1.2 迭代器 1.3 容量 1.4 元素访问 1.4.1 遍历方法 1.5 修改器 1.6 空间配置器 2. deque的非成员函数 deque deque(通常发音为 &…

告别VLAN孤岛,两招让你轻松实现互访

实际网络中,经常会有VLAN之间互访的需求。 很多网工通常会选择一些方法,来实现不同VLAN间主机的相互访问,比如说Vlanif、单臂路由。 今天就教你轻松实现VLAN间互访。 01-通过子接口实现 VLAN 间的互访 在二层交换环境下,一个VLA…

线程是什么

目录 一、教材观点 二、简述进程是如何运行的 简述进程切换原理: 三、线程是什么 线程底层是如何被管理的 四、重讲线程概念理解 一、教材观点 教材观点: 线程是一个执行分支,执行分支更细,调度成本更低。线程是进程内部的…

Android SystemServer 启动流程分析

和你一起终身学习,这里是程序员Android 经典好文推荐,通过阅读本文,您将收获以下知识点: 一、SystemServer 启动的服务有哪些二、SystemServer启动总体流程概述三、SystemServer 如何启动,是谁启动的?四、 SystemServe…

解决哈希冲突

1、HashMap引入了链式寻址法来解决hash冲突,冲突的key,HashMap把这些key组成一个单向链表,然后采用尾插法把key保存到链表的尾部。 使用二次扰动函数(hash函数)来降低哈希冲突的概率,使数据平均分布。 pu…

【VUE】Unterminated template literal:拼接字符串包括<script></script>时报错误

vue拼接字符串包括时报错误提示Unterminated template literal vue拼接字符串包括script标签时报错误提示Unterminated template literal解决方法加反斜杠就可以&#xff0c;在script结束标签里边加反斜杠<\/script> 代码 htmlData: <div id"b0e5c00cc51e4a4…

svg图标颜色随父元素变换

给svg加上一下样式 fill: currentColor;注&#xff1a;为什么有的svg设置了fill: currentColor;还是一样不生效&#xff1f; 用电脑自带的txt或者代码开发工具&#xff08;如&#xff1a;HbuilderX&#xff09;打开svg文件 全局搜索 fill 把fill指定颜色去掉 保存就OK了

存储函数,存储过程的应用

查看触发器 mysql> show triggers \G *************************** 1. row ***************************Trigger: student_insert_triggerEvent: INSERTTable: studentStatement: BEGINupdate student_total set totaltotal1;ENDTiming: AFTERCreated: 2023-07-11 16:13:51…

msvcp71.dll丢失怎样修复,msvcp71.dll丢失的三个解决方法

在运行游戏&#xff0c;软件程序的时候&#xff0c;电脑提示msvcp71.dll丢失怎样修复&#xff1f;下面小编就开始介绍msvcp71.dll在电脑系统中的的目录&#xff0c;作用&#xff0c;以及丢失后三个解决方法。 目录 msvcp71.dll通常位于系统目录里&#xff1a; msvcp71.dll丢失…

本地git 提交代码时 报错 [session-4d40e187] Access denied

1、首先执行以下命令查看本地是否绑定仓库 git remote -v2、如果没有执行以下命令添加 git remote add name(仓库名) git地址 // 添加成功后执行git remote -v 检查3、提交代码到新仓库&#xff0c;执行以下代码即可 git add . git commit -m fix:init git push name(于第二…

有趣的命令——————用shell脚本实现(石头剪刀布)小游戏

vim games。sh 输入以下内容&#xff1a;#!/bin/bash echo "这是一个小游戏(石头0 剪刀1 布2)&#xff0c;放松一下:" pc$(expr $RANDOM % 3) read -p "请输入你的选择:" user if [ $pc -eq 0 -a $user -eq 2 ] || [ $pc -eq 1 -a $user -eq 0 ] || [ $pc …