08 - 条件判断语句

---- 整理自狄泰软件唐佐林老师课程

文章目录

  • 1. 条件判断语句
  • 2. 语法说明
  • 3. 经验
  • 4. 代码

1. 条件判断语句

  • makefile 中支持条件判断语句
    • 可以根据条件的值来决定 make 的执行
    • 可以比较两个不同变量或者变量和常量的值

在这里插入图片描述
注:条件判断语句只能用于控制 make 实际执行的语句;但是,不能控制规则中命令的执行过程。

2. 语法说明

  • 常用形式
ifxxx (arg1,arg2)

在这里插入图片描述

  • 其它
ifxxx "arg1" "arg2"
ifxxx 'arg1' 'arg2'
ifxxx "arg1" 'arg2'
ifxxx 'arg1' "arg2"
.PHONY: test

var1 := A
var2 := $(var1)
var3 :=

test:
    ifeq ($(var1),$(var2)) # ifeq else endif前不能有tab键
		@echo "var1 == var2"
    else
		@echo "var1 != var2"
    endif

在这里插入图片描述

.PHONY : test

var1 := A
var2 := $(var1)
var3 :=			 # 定义一个没有值的变量

test:
    ifeq ($(var1),$(var2)) # 前面使用空格
		@echo "var1 == var2"  # 前面使用tab
    else
		@echo "var1 != var2" 	
    endif
    
    ifneq ($(var2),)
		@echo "var2 is NOT empty"    
    else
		@echo "var2 is empty"    
    endif
    
    ifdef var2
		@echo "var2 is NOT empty"    
    else
		@echo "var2 is empty"    
    endif
    
    ifndef var3
		@echo "var3 is empty"    
    else
		@echo "var3 is NOT empty"    
    endif

在这里插入图片描述

3. 经验

  • 条件判断语句之前可以有空格,但不能有 tab 字符('\t')
  • 在条件语句中不要使用自动变量($@$^$<
  • 一条完整的条件语句必须位于同一个 Makefile 中
  • 条件判断类似于 C 语言中的宏,预处理阶段有效,执行阶段无效
  • make 在加载 makefile 时:
    • 首先计算表达式的值(赋值方式不同,计算方式不同)
    • 根据判断语句的表达式决定执行的内容
.PHONY : test

var1 := 
var2 := $(var1)

var3 =		    
var4 = $(var3)  # 递归赋值,无法在预处理时判断是否被定义,所以var4打印出已经被定义

test:
    ifdef var1
		@echo "var1 is defined"
    else
		@echo "var1 is not defined"
    endif
  
    ifdef var2
		@echo "var2 is defined"
    else
		@echo "var2 is not defined"
    endif

    ifdef var3
		@echo "var3 is defined"
    else
		@echo "var3 is not defined"
    endif

    ifdef var4
		@echo "var4 is defined"
    else
		@echo "var4 is not defined"
    endif

在这里插入图片描述

.PHONY : test

var1 := 
var2 := $(var1)

var3 =		    
var4 = $(var3)  # 递归赋值,无法在预处理时判断是否被定义,所以var4打印出已经被定义
var3 = 3 # make在解析makefile时,完全可以判断出var3是否有值,而不用等到执行期间

test:
    ifdef var1
		@echo "var1 is defined"
    else
		@echo "var1 is not defined"
    endif
  
    ifdef var2
		@echo "var2 is defined"
    else
		@echo "var2 is not defined"
    endif

    ifdef var3
		@echo "var3 is defined"
    else
		@echo "var3 is not defined"
    endif

    ifdef var4
		@echo "var4 is defined"
    else
		@echo "var4 is not defined"
    endif

在这里插入图片描述

4. 代码

【08 条件判断语句】

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

探索大模型能力--prompt工程

1 prompt工程是什么 1.1 什么是Prompt&#xff1f; LLM大语言模型终究也只是一个工具&#xff0c;我们不可能每个人都去训一个大模型&#xff0c;但是我们可以思考如何利用好大模型&#xff0c;让他提升我们的工作效率。就像计算器工具一样&#xff0c;要你算10的10倍&#x…

今天看到一个有意思的问题:个人网站被恶意大量访问,怎么办(文末附GPT指令优化)

目录 问题描述 一、GPT 3.5 二、通义千问 三、讯飞星火 四、文心一言 五、Kimi 六、智谱清言 个人分析&#xff1a; 问题描述 大家好&#xff01;我的个人网站每天晚上7点30到11点被固定的十几个IP大量下载exe&#xff0c;造成网站带宽不够&#xff0c;怎么办! 已经把…

大模型系列之解读MoE

Mixtral 8x7B 的推出&#xff0c; 使我们开始更多地关注 基于MoE 的大模型架构&#xff0c; 那么&#xff0c;什么是MoE呢&#xff1f; 1. MoE溯源 MoE的概念起源于 1991 年的论文 Adaptive Mixture of Local Experts&#xff08;https://www.cs.toronto.edu/~hinton/absps/jjn…

如何在Android设备上恢复丢失的照片

Android手机或平板电脑上的照片丢失了&#xff1f;不要惊慌&#xff0c;您也许可以恢复它们。 由于我们的大量数据和日常生活都存储在一台设备上&#xff0c;有时将所有照片存储在本地的 Android 智能手机或平板电脑上可能是一项冒险的工作。无论是通过事故&#xff08;损坏、…

python数据分析常用基础语法

Python语言基础——语法基础 前言一、变量的介绍与使用变量的介绍变量命名规则变量的使用拓展 二、标识符标识符命名命名规则注意事项 三、数据类型数据类型的介绍数据类型的查看示例 四、输入与输出输入和输出的介绍format格式化输出占位符 五、代码缩进与注释代码缩进 前言 …

最高20K/月,安全、数通、云计算多个方向急招,可内推!

高级安全工程师【岗位职责及要求】 1、统筹负责行业客户的安全项目交付&#xff0c;能够独自输出技术方案并完成施&#xff0c;并具备指导初中级工程师实施的能力&#xff1b; 2、掌握H3C全系列安全产品功能并对全系列产品原理有深入了解&#xff0c;能够熟练完成安全产品规划及…

如何找到台式电脑的ip地址

在数字时代&#xff0c;每台接入网络的设备都拥有一个独特的标识&#xff0c;这就是IP地址。无论是手机、笔记本电脑还是台式电脑&#xff0c;IP地址都扮演着至关重要的角色&#xff0c;它帮助设备在网络世界中定位并与其他设备进行通信。对于许多电脑用户来说&#xff0c;了解…

RK3576芯片规格,以及与RK3588对比

瑞芯微RK3576是一款高性能、低功耗的SoC&#xff08;系统级芯片&#xff09;处理器&#xff0c;适用于基于ARM的PC、边缘计算设备、个人移动互联网设备等多种应用场景。它采用Arm架构的八核心CPU&#xff0c;集成了GPU、MCU、NPU、VPU等多种计算核心&#xff0c;并具有丰富的外…

Python面向对象编程思想的深入学习

魔术方法的使用 案例体验 class Student:def __init__(self, name, age):self.name nameself.age age# __str__魔术方法, 如果不去写这个方法&#xff0c;那么print输出的则是信息存储的内存地址。def __str__(self):return fStudent类对象&#xff0c;name:{self.name}, ag…

SolidWorks进行热力学有限元分析一、模型建立

1.话不多说按照我的操作来 2.这一步鼠标移到中心点直接拉就行 3.这里选单位&#xff0c;继续按照操作来 4.选中这个边&#xff0c;直接拉&#xff0c;输入尺寸后确定&#xff0c;其他边同理 5.鼠标右键设置厚度 6.右键零件&#xff0c;然后编辑材料&#xff0c;给他赋予你需要的…

RapidJSON介绍

1.简介 RapidJSON 是一个 C 的 JSON 解析库&#xff0c;由腾讯开源。 支持 SAX 和 DOM 风格的 API&#xff0c;并且可以解析、生成和查询 JSON 数据。RapidJSON 快。它的性能可与strlen() 相比。可支持 SSE2/SSE4.2 加速。RapidJSON 独立。它不依赖于 BOOST 等外部库。它甚至…

ubuntu20安装colmap

系统环境 ubuntu20 &#xff0c;cuda11.8 &#xff0c;也安装了anaconda。因为根据colmap的官方文档说的&#xff0c;如果根据apt-get安装的话&#xff0c;默认是非cuda版本的&#xff0c;而我觉得既然都安装了cuda11.8了&#xff0c;自然也要安装cuda版本的colmap。 安装步骤…

力扣hot100:543. 二叉树的直径/108. 将有序数组转换为二叉搜索树

一、543. 二叉树的直径 LeetCode&#xff1a;543. 二叉树的直径 二叉树的直径 二叉树的 直径 是指树中任意两个节点之间最长路径的 长度 。 遇到二叉树的问题很容易去直接用求解的目标去定义递归函数。但是仔细考虑&#xff0c;返回树的直径并不能向上传播。因此我们可以拆…

Git同步代码

Git中5个区&#xff0c;和具体操作&#xff1f; 代码提交和同步代码 代码撤销和撤销同步 平时是怎么提交代码的&#xff1f; 第零步: 工作区与仓库保持一致第一步: 文件增删改&#xff0c;变为已修改状态第二步: git add &#xff0c;变为已暂存状态 $ git status $ git a…

HCIP的学习(OSPF总篇)

HCIA的复习 这边可以与我之前写的HCIA博客结合起来一起看&#xff0c;效果更好 HCIA的学习&#xff08;6&#xff09; OSPF状态机 down—关闭-----一旦启动OSPF进程&#xff0c;并发出hello报文&#xff0c;则进入下一个状态init----初始化状态------当收到的hello报文中存在…

临时邮箱API发送邮件的安全性?如何保障?

临时邮箱API发送邮件的步骤有哪些&#xff1f;设置邮箱API方法&#xff1f; 电子邮件作为一种重要的通信方式&#xff0c;而临时邮箱API作为一种新兴的邮件发送技术&#xff0c;其安全性更是成为大家关注的焦点。那么&#xff0c;临时邮箱API发送邮件的安全性究竟如何呢&#…

leetcode-括号生成-101

题目要求 思路 1.左括号的数量等于右括号的数量等于n作为判出条件&#xff0c;将结果存到res中 2.递归有两种&#xff0c;一种是增加左括号&#xff0c;一种是增加右括号&#xff0c;只要左括号的数量不超过n&#xff0c;就走增加左括号的递归&#xff0c;右括号的数量只要小于…

Qt :信号与槽

信号与槽 信号介绍connect 函数使用connect 函数传参问题 定义槽&#xff08;solt&#xff09;函数方法一方法二 定义信号关键字 signals、emit 定义带参数的信号和槽参数个数不一致问题断开信号和槽的连接 disconnect lambda 表达式 信号介绍 Qt 中&#xff0c;信号会涉及三个…

装饰器模式-原理分析以及动手练习

目录 应用场景涉及的角色和类&#xff08;个人理解&#xff09;涉及的角色组件&#xff08;标准&#xff09;基本实现 Demo&#xff08;可以直接 copy 跑一下看效果&#xff09;自己动手实战需求参考答案 相关话题参考文章 应用场景 需要给一个现有类添加附加功能&#xff0c;…

北京车展现场体验商汤DriveAGI自动驾驶大模型展现认知驱动新境界

在2024年北京国际汽车展的舞台上&#xff0c;众多国产车型纷纷亮相&#xff0c;各自展示着独特的魅力。其中&#xff0c;小米SUV7以其精美的外观设计和宽敞的车内空间&#xff0c;吸引了无数目光&#xff0c;成为本届车展上当之无愧的明星。然而&#xff0c;车辆的魅力并不仅限…
最新文章