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…

每日一学——自动化工具(Jenkins)

3.2 Jenkins 3.2.1 CI/CD流程设计 嘿&#xff0c;小伙伴们&#xff01;今天我们来聊聊Jenkins——这个在持续集成&#xff08;CI&#xff09;和持续部署&#xff08;CD&#xff09;领域里大名鼎鼎的工具。Jenkins不仅可以帮我们自动化构建和测试代码&#xff0c;还能自动部署…

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 起…

Python 数据结构揭秘:栈与队列

栈&#xff08;Stack&#xff09; 定义 栈是一种后进先出&#xff08;Last In First Out, LIFO&#xff09;的数据结构。它类似于一个容器&#xff0c;只能在一端进行插入和删除操作。栈有两个主要的操作&#xff1a;push&#xff08;入栈&#xff09;和 pop&#xff08;出栈…

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…

ARM CCA机密计算安全模型之固件更新

安全之安全(security)博客目录导读 目录 1、远程更新 2、本地更新 3、鲁棒性 1、远程更新 Arm欢迎关于CCA固件更新需求的反馈。一般而言&#xff0c;CCA固件更新过程可以描述如下&#xff1a; CCA固件更新客户端使用固件更新协议与远程更新服务通信。CCA固件更新客户端将…

Assimp的ReadFileFromMemory函数踩坑

使用ReadFileFromMemory函数加载模型的问题 使用ReadFileFromMemory函数无法加载obj和md3等模型数据分散在多个文件中的模型。obj模型通常有一部分数据&#xff08;如纹理数据&#xff09;在mtl文件中保存&#xff0c;如果只把obj文件加载到内存中&#xff0c;并通过ReadFileF…

机组的概述

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

后端开发入门超完整速成路线(算法篇)

引言 后端开发是软件开发中不可或缺的一部分&#xff0c;它涉及到服务器、数据库、API等核心组件的构建和维护。对于初学者来说&#xff0c;掌握算法和数据结构是进入后端开发领域的基础。本文将为你提供一个超完整的算法学习路线&#xff0c;帮助你快速入门&#xff0c;并在文…

主键有多种设计

1. 自增ID id bigint NOT NULL AUTO_INCREMENT COMMENT 主键ID 优点&#xff1a; 简单直观自动生成递增有序&#xff0c;对索引友好 缺点&#xff1a; 可能暴露业务信息分布式系统下需要特殊处理合并数据时可能冲突 2. UUID/GUID id char(36) NOT NULL COMMENT 主键ID …

【面试】后端开发面试中常见数据结构及应用场景、原理总结

在后端开发面试中&#xff0c;常见的数据结构包括数组、链表、栈、队列、二叉树、平衡树、堆、图和哈希表等。以下是这些数据结构的总结&#xff0c;包括它们的应用场景、优缺点。 常见数据结构及其应用场景 数据结构应用场景数组存储固定大小的数据集合&#xff0c;如学生成…