Linux自动化构建工具Make/Makefile

ops/2024/10/19 23:37:14/

make是一个命令 makefile是一个文件

touch 创建并用vim打开makefile

写入依赖对象和依赖方法 

mycode是目标文件

第二行数依赖方法 以tab键开头

 

make

makefile原理 

 makefile中写的是依赖关系和依赖方法

 

 clean英语清理文件 后不用加源文件。.PHONY定义clean是伪目标。

 

 make只能make一次

 被修饰为伪目标的clean总是被执行。

 

mycode不设为伪目标时,系统怎么知道它已经被编译了?

通过mycode.c的Modify时间是否比mycode的Modify时间早。

.PHONY设置伪目标可以多次执行的原理就是忽略时间先后实现的。

 Modify是内容修改时间,Change是属性修改时间。

 更改属性。只更改属性时间

 

 更改内容,属性也更改。因为大小改变。

 access时间随机改变

touch mycode.c能更改mycode.c的更改时间。

make默认只执行第一个目标文件。

Makefile推导规则

 .c预处理变.i .i编译变成.s .s经过汇编变成.o .o经过链接形成可执行。

依赖关系列表。

 先执行最后一条语句。

 进度条程序

预备知识:

缓冲区:

会先等2秒再显示

原因是数据先存储在了缓冲区。

可以使用fflush先把内容显示出来。 

 

 \n是行缓冲,会直接显示。

回车换行

\r \n

使用\r在同一地方打印,使用fflush解决\r缓冲区不刷新问题。

 

%2d防止到9时显示90.

没有makefile ls>自动创建 

 

 makefile中不用加process.h process.h在同一个文件中 头文件默认在当前路径和库路径中搜索。

 

 

 

 

 

process.h

#pragma once                                                                                                                                                        2 #include<stdio.h>3 #include<string.h>4 #include<unistd.h>5  #define NUM 1016 #define STYLE '#'7 void ProcessOn();

 process.c

1 #include"process.h"2 3 void ProcessOn()4 {5  6   int cnt=0;7   char bar[NUM];8   memset(bar,'\0',sizeof(bar));9   const char* label="|/-\\";10   while(cnt<=100)11   {12       printf("[%-100s][%d%%][%c]\r",bar,cnt,label[cnt%4]);                                                                                                          13       fflush(stdout);14       bar[cnt++]='#';15       usleep(50000);                                                                                                                                      16   }                                                                                  17   printf("\n");                                      18                                       19 } 

 快速更改风格:

 

 

 

 


http://www.ppmy.cn/ops/122051.html

相关文章

SQL进阶技巧:统计各时段观看直播的人数

目录 0 需求描述 1 数据准备 2 问题分析 3 小结 如果觉得本文对你有帮助&#xff0c;那么不妨也可以选择去看看我的博客专栏 &#xff0c;部分内容如下&#xff1a; 数字化建设通关指南 专栏 原价99&#xff0c;现在活动价39.9&#xff0c;十一国庆后将上升至59.9&#…

UE5.4.3 Replay 重播回放系统

工程的配置文件DefaultEngine.ini中需要加入 +NetDriverDefinitions=(DefName=“DemoNetDriver”,DriverClassName=“/Script/Engine.DemoNetDriver”,DriverClassNameFallback=“/Script/Engine.DemoNetDriver”) 此步骤将启用并加载DemoNetDriver .ini添加示例 [/Script/En…

5QI(5G QoS Identifier)

5QI&#xff08;5G QoS Identifier&#xff0c;5G 服务质量标识符&#xff09;是在5G网络中用于定义特定数据流所需服务级别的指标。它用于优先处理流量&#xff0c;并根据流量的类型及其特定需求分配网络资源。5QI值从1到255&#xff0c;每个值对应一组QoS参数&#xff0c;这些…

前端Vue项目的自动打包、上传与部署

文章目录 前言思路与流程脚本实现1. 打包前端项目2. 上传前端项目4. 传递密码5. 代码优化完整脚本结语前言 在实际项目开发中,并不是所有项目都会配置 CI/CD 流程,特别是在中小型团队或者公司内部测试环境中,很多时候我们仍然需要手动打包、上传和部署项目。这个过程虽然简…

react+antdMobie实现消息通知页面样式

一、实现效果 二、代码 import React, { useEffect, useState } from react; import style from ./style/index.less; import { CapsuleTabs, Ellipsis, Empty, SearchBar, Tag } from antd-mobile; //消息通知页面 export default function Notification(props) {const [opti…

isinstance()学习

aa {} if isinstance(aa,dict):print("是")aa 2 if isinstance(aa,dict):print("是")aa 2 if isinstance(aa,int):print("是")aa [] if isinstance(aa,list):print("list")aa [1,2,3] if isinstance(aa,list):print("list"…

3分钟学会下载 blender

1. blender简介 Blender是一款开源的3D创作套件&#xff0c;它由Blender Foundation维护&#xff0c;并得到了全球志愿者和专业开发者的支持。Blender广泛应用于3D模型的制作、动画、渲染、视频编辑、游戏创建、模拟、 composting以及3D打印等多个领域。 功能特点&#xff1a…

Safari 浏览器中的 <audio> 标签的控件无效 - 解决方法

Safari 浏览器中的 <audio> 标签的控件无效&#xff0c;可能是由以下几个原因导致的&#xff1a; 1. HTML 代码问题 确保 HTML 代码中正确使用了 <audio> 标签&#xff0c;并且 controls 属性被正确设置。一个简单的例子如下&#xff1a; <audio controls>…