Linux高并发服务器开发 第八天(makefile的规则 wildcard/patsubst函数 普通变量/自动变量/其他关键字)

目录

1.makefile

1.1makefile的规则

1.2两个函数

1.3三个自动变量

1.3.1普通变量 (自定义变量)

1.3.2自动变量

1.3.3其他关键字

- ALL/all

- clean


1.makefile

- 作用:进行项目管理。
- 初步学习:1个规则、2个函数、3个自动变量。
- 要想使用默认的make命令,管理项目。makefile文件名:必须是 “makefile”  或 “Makefile”

1.1makefile的规则

语法:
目标:依赖条件
(一个tab缩进)命令

举例:

- 目标的时间,必须晚于依赖条件的时间,否则,更新目标。
- 依赖条件,如果不存在,寻找新的规则去产生依赖条件。

举例:

1.2两个函数

wildcard 函数:用来匹配文件名,得到字符串
src = $(wildcard ./*.c)  : 匹配当前工作目录下的所有.c文件。将文件名组成列表,赋值给变量 src
    相当于: src = add.c sub.c mul.c

patsubst 函数:用来字符串替换
obj = $(patsubst %.c, %.o, $(src)) : 将 参3 中,包含 参1的部分,替换为 参2.
    相当于: obj = add.o sub.o mul.o
obj = $(patsubst %.c, %, $(src))
    相当于: obj = add sub mul

举例:

可以替换为:

1.3三个自动变量

1.3.1普通变量 (自定义变量)

- 定义变量语法:变量名 = 变量值  (都是字符串)
    - 举例:foo = abc
- 取变量值语法:$(变量)
    - 举例:bar = $(foo)  ===>  bar = abc
- makefile 自带变量:
    - CC = cc
    - CPPFLAGES
    - CFLAGES
    - LDFLAGES

1.3.2自动变量

- $@: 在规则的命令中,表示规则中的目标。

替换为
- $^:  在规则的命令中,表示所有依赖条件。

- $<:  在规则的命令中,表示第一个依赖条件。如果将该变量应用在 “模式规则” 中,它可以将依赖条件列表中的每一个依赖,依次取出,套用模式规则。

替换为

1.3.3其他关键字
- ALL/all:  

    - 用来给 makefile 文件,指定 “终极目标”。

    - makefile 文件,默认的规则为:从上而下,碰到的第一个 规则中的目标,为 “终极目标”。我们可以使用 ALL 指定终极目标。

- clean:

    - 用来 借助 makefile 清除项目中的指定文件。如:*.o、a.out

    - 举例:


            

1.4模式规则

- 可以将makefile文件中,具有严格统一格式的规则,使用模式规则代替。要求模式规则中,只能使用 “$<” 符号。

- 静态模式规则:
    - 将模式规则,指定给某一个变量使用。
 $(obj):%.o:%.c
      gcc -c $< -o $@

1.5伪目标

- 针对,残缺的规则,也能使之生成目标。

makefile
.PHONY:clean ALL

1.6 其他参数

- -n:模拟执行 makefile ,不真正执行!推荐首次编写 makefile 完成时,使用!!!
- -f:指定命名为 非 “makefile” 的文件。执行make命令

1.7完成版

src = $(wildcard *.c)                    
obj = $(patsubst %.c, %.o, $(src))        

# 使用gcc 覆盖 cc
CC = gcc
target = app

ALL:$(target)

$(target):$(obj)            
    $(CC) $^ -o $@

$(obj):%.o:%.c
    $(CC) -c $< -o $@

clean:
    -rm -rf $(obj) $(target)

.PHONY:clean ALL

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

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

相关文章

Vue动态控制disabled属性

参考:https://blog.csdn.net/guhanfengdu/article/details/126082781 在Vue中disabled:的值是受布尔值影响的&#xff0c;false为关闭禁用&#xff0c;true为开启禁用效果。 结果就是true会让按钮禁用 相反false会让按钮重新可以使用 那如果想要通过id属性值来判断是否禁用…

【DevOps】Jenkins项目发布

Jenkins项目发布 文章目录 Jenkins项目发布前言资源列表基础环境一、Jenkins发布静态网站1.1、项目介绍1.2、部署Web1.3、准备gitlab1.4、配置gitlab1.5、创建项目1.6、推送代码 二、Jenkins中创建gitlab凭据2.1、创建凭据2.2、在Jenkins中添加远程主机2.3、获取gitlab项目的UR…

Vue2/Vue3使用DataV

Vue2 注意vue2与3安装DataV命令命令是不同的Vue3 DataV - Vue3 官网地址 注意vue2与3安装DataV命令命令是不同的 vue3vite 与 Vue3webpack 对应安装也不同vue3vite npm install kjgl77/datav-vue3全局引入 // main.ts中全局引入 import { createApp } from vue import Da…

【AI学习】Transformer深入学习(二):从MHA、MQA、GQA到MLA

前面文章&#xff1a; 《Transformer深入学习&#xff08;一&#xff09;&#xff1a;Sinusoidal位置编码的精妙》 一、MHA、MQA、GQA 为了降低KV cache&#xff0c;MQA、GQA作为MHA的变体&#xff0c;很容易理解。 多头注意力&#xff08;MHA&#xff09;&#xff1a; 多头注…

trendFinder - 利用 AI 掌握社交媒体上的热门话题

1600 Stars 177 Forks 7 Issues 2 贡献者 MIT License Javascript 语言 代码: https://github.com/ericciarla/trendFinder 更多AI开源软件&#xff1a;AI开源 - 小众AI Trend Finder 收集并分析来自关键影响者的帖子&#xff0c;然后在检测到新趋势或产品发布时发送 Slack 通知…

以图像识别为例,关于卷积神经网络(CNN)的直观解释

大家读完觉得有意义记得关注和点赞&#xff01;&#xff01;&#xff01; 作者以图像识别为例&#xff0c;用图文而非数学公式的方式解释了卷积神经网络的工作原理&#xff0c; 适合初学者和外行扫盲。 目录 1 卷积神经网络&#xff08;CNN&#xff09; 1.1 应用场景 1.2 起…

vim 的基础使用

目录 一&#xff1a;vim 介绍二&#xff1a;vim 特点三&#xff1a;vim 配置四&#xff1a;vim 使用1、vim 语法格式2、vim 普通模式&#xff08;1&#xff09;保存退出&#xff08;2&#xff09;光标跳转&#xff08;3&#xff09;文本删除&#xff08;4&#xff09;文本查找&…

HP 电脑开机黑屏 | 故障判断 | BIOS 恢复 | BIOS 升级

注&#xff1a;本文为 “HP 电脑开机黑屏 | 故障判断 | BIOS 恢复 | BIOS 升级” 相关文章合辑。 引文图片 csdn 转储异常&#xff0c;重传。 篇 1&#xff1a;Smart-Baby 回复中给出故障现象判断参考 篇 2、篇3 &#xff1a;HP 官方 BIOS 恢复、升级教程 开机黑屏&#xff0c…

JAVA:利用 Redis 实现每周热评的技术指南

1、简述 在现代应用中&#xff0c;尤其是社交媒体和内容平台&#xff0c;展示热门评论是常见的功能。我们可以通过 Redis 的高性能和丰富的数据结构&#xff0c;轻松实现每周热评功能。本文将详细介绍如何利用 Redis 实现每周热评&#xff0c;并列出完整的实现代码。 2、需求分…

VSCode下配置Blazor环境 断点调试Blazor项目

VSCode下使用Blazor的环境配置和插件推荐 Blazor是一种用于构建交互式Web UI的.NET框架&#xff0c;它可以让你使用C#、Razor和HTML进行Web开发&#xff0c;而不需要JavaScript。在这篇文章中&#xff0c;我们将介绍如何在VSCode中配置Blazor环境&#xff0c;并推荐一些有用的…

《Rust权威指南》学习笔记(一)

基本介绍 1.Rust使用场景 &#xff1a;需要运行速度、需要内存安全、更好的利用多处理器。程序员无法在安全的Rust代码中执行任何非法的内存操作。相对于C#等带有垃圾回收机制的语言来讲&#xff0c;Rust遵循了零开销抽象&#xff08;Zero-Cost Abstraction&#xff09;规则&a…

STM32-笔记26-WWDG窗口看门狗

一、简介 窗口看门狗用于监测单片机程序运行时效是否精准&#xff0c;主要检测软件异常&#xff0c;一般用于需要精准检测程序运行时间的场合。 窗口看门狗的本质是一个能产生系统复位信号和提前唤醒中断的6位计数器&#xff08;有的地方说7位。其实都无所谓&#xff0…

机组的概述

计算机系统组成 硬件系统和软件系统 计算机硬件 1.冯诺依曼机基本思想 特点 1.采用“存储程序”工作方式 2.硬件系统由运算器&#xff0c;存储器&#xff0c;控制器&#xff0c;输入输出设备组成 3.指令和数据存在存储器中&#xff0c;形式无区别 4.指令和数据用二进制代…

TypyScript从入门到精通

TypyScript从入门到精通 TypyScript 是什么&#xff1f;增加了什么环境搭建二、为何需要 TypeScript三、编译 TypeScript四、类型声明五、类型推断基本类型六、类型总览JavaScript 中的数据类型TypeScript 中的数据类型1. 上述所有 JavaScript 类型2. 六个新类型&#xff1a;3.…

Tableau数据可视化与仪表盘搭建-安装教程

下载 tableau.com/zh-cn/support/releases 滚动到最下方的下载 在下载的同时 我们点击登录&#xff0c;去注册一个tableau的账号 下面点击我们下载好的tableau安装程序 不要自定义安装&#xff0c;会有路径问题 点击试用14天 点击激活 激活学生 tableau.com/zh-cn/academic…

Scala_【4】流程控制

第四章 分支控制if-else单分支双分支多分支返回值嵌套分支 For循环控制包含边界不包含边界循环守卫循环步长嵌套循环循环返回值 While循环Break友情链接 分支控制if-else 单分支 双分支 多分支 返回值 嵌套分支 For循环控制 Scala也为for循环这一常见的控制结构提供了非常多的…

Backend - C# 的日志 NLog日志

目录 一、注入依赖和使用 logger 二、配置记录文件 1.安装插件 NLog 2.创建 nlog.config 配置文件 3. Programs配置日志信息 4. 设置 appsettings.json 的 LogLevel 5. 日志设定文件和日志级别的优先级 &#xff08;1&#xff09;常见的日志级别优先级 &#xff08;2&…

ESP32自动下载电路分享

下面是一个ESP32系列或者ESP8266等电路的一个自动下载电路 在ESP32等模块需要烧写程序的时候&#xff0c;需要通过将EN引脚更改为低电平并将IO0引脚设置为低电平来切换到烧写模式。 有时候也会采用先将IO接到一个按键上&#xff0c;按住按键拉低IO0的同时重新上电的方式进入烧写…

1-markdown转网页样式页面 --[制作网页模板] 【测试代码下载】

markdown转网页 将Markdown转换为带有样式的网页页面通常涉及以下几个步骤&#xff1a;首先&#xff0c;需要使用Markdown解析器将Markdown文本转换为HTML&#xff1b;其次&#xff0c;应用CSS样式来美化HTML内容。此外&#xff0c;还可以加入JavaScript以增加交互性。下面我将…

Eplan 项目结构(高层代号、安装地点、位置代号)

Eplan中的项目结构分为3个层次&#xff1a; &#xff08;1&#xff09;功能面结构。指明这个系统的功能&#xff0c;有什么用途。在EPlan中&#xff0c;指的就是"高层代号&#xff08;&#xff09;"。 一般指的是线体。 &#xff08;2&#xff09;位置面结构。指明该…