首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Makefile:ifeq指令将特殊变量与常量进行比较不起作用

在Makefile中,ifeq指令用于检查两个常量或变量是否相等。如果它们相等,那么下一行的命令将被执行,直到遇到另一个ifeq指令或endif指令。如果它们不相等,那么下一行的命令将被跳过,直到遇到另一个ifeq指令或endif指令。

ifeq指令的语法如下:

代码语言:txt
复制
ifeq (arg1, arg2)

其中,arg1arg2是要比较的常量或变量。如果它们相等,那么下一行的命令将被执行,否则将被跳过。

例如,以下Makefile将检查CC变量是否被设置为gcc

代码语言:txt
复制
CC = gcc

all:
ifeq ($(CC), gcc)
	@echo "CC is set to gcc"
else
	@echo "CC is not set to gcc"
endif

在这个例子中,ifeq指令将CC变量与常量gcc进行比较。如果它们相等,那么将输出CC is set to gcc,否则将输出CC is not set to gcc

需要注意的是,ifeq指令只能用于比较常量或变量,而不能用于比较函数或命令的输出。此外,ifeq指令不支持模式匹配和正则表达式。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

Makefile学习2

ifeq后面的比较语句使用小括号抱起来,ifeq和小括号之间要用空格隔开,小括号里的两个参数用逗号隔开。当小括号里的条件满足时,make就会执行这个分支的命令,否则执行else部分。...ifeq一般和变量结合使用: mode = debug hello: hello.c ifeq ($(mode),debug) @echo "debug mode" gcc -g -o...ifdef 关键字 ifdef 关键字用来判断一个变量是否已经定义。如果变量的值非空(在Makefile中,没有定义的变量的值为空),表达式为真。...匹配任意一个字符 [] 我们可以指定匹配的字符放在 “[]” 中 除此之外,Makefile还有经常使用的几个自动变量也可以看做特殊通配符: $@:所有目标文件 $^:目标依赖的所有文件 $<:第一个依赖文件...:所有更新过的依赖文件 在Makefile中,通配符主要用在两个场合: 用在规则的目标和依赖中:make在读取Makefile时会自动对其进行匹配处理 test: *.o gcc -o $@ $

31910

芯片开发最常用的Makefile语法和功能

为了解决这个问题,你可以利用 $(nullstring) 这一特殊变量来确保正确创建含有单个空格的变量。 (nullstring) 是 Makefile 中的一个内置变量,其值为空字符串。...这意味着在变量定义时,Makefile 不会立即展开其值,而是将其作为一个待处理的宏,直到该变量在后续规则或表达式中被引用时才进行展开。...+= (追加赋值):当你使用 += 对一个变量进行赋值时,新指定的值会被添加到该变量当前值的末尾,相当于在两个值之间进行了字符串拼接。...当然也可以最第一行最后加反斜杠进行转义: all: @export foo=hello \ echo $${foo} $$符号的用法 上面我们使用了echo ${foo},为什么要使用两个符号主要用于...平时用Makefile来做一些芯片方面的像vcs仿真编译这些工作,上面Makefile中的知识就大概够用了。但Makefile还有一个经常使用的场景,就是对C文件的编译。

14610
  • Makefile 入门教程

    以下是一些高级用法的详细介绍: 5.1 条件语句和函数 条件语句 Makefile 支持条件语句,可以根据条件来执行不同的规则或命令。通常使用 ifeq 和 ifdef 这两个条件语句。...ifeq ($(VARIABLE), value) # 条件为真时的规则和命令 else # 条件为假时的规则和命令 endif 例如,可以根据是否定义了 DEBUG 变量来设置不同的编译选项...然后使用 -include 指令来包含这些 .d 文件,以自动跟踪依赖关系。 5.3 多目录项目 对于大型项目,通常需要将 Makefile 拆分成多个子目录,每个子目录都有自己的 Makefile。...$(MAKE) 是一个 Makefile 中的特殊变量,用于启动另一个 Makefile。 5.4 高级变量操作 Makefile 支持高级的变量操作,包括字符串操作、条件赋值、变量展开等。...--- 声明:本作品采用署名-非商业性使用-相同方式共享 4.0 国际 (CC BY-NC-SA 4.0)进行许可,使用时请注明出处。 ---

    40620

    Makefile 入门教程

    以下是一些高级用法的详细介绍: 5.1 条件语句和函数 条件语句 Makefile 支持条件语句,可以根据条件来执行不同的规则或命令。通常使用 ifeq 和 ifdef 这两个条件语句。...ifeq ($(VARIABLE), value) # 条件为真时的规则和命令 else # 条件为假时的规则和命令 endif 例如,可以根据是否定义了 DEBUG 变量来设置不同的编译选项...然后使用 -include 指令来包含这些 .d 文件,以自动跟踪依赖关系。 5.3 多目录项目 对于大型项目,通常需要将 Makefile 拆分成多个子目录,每个子目录都有自己的 Makefile。...$(MAKE) 是一个 Makefile 中的特殊变量,用于启动另一个 Makefile。 5.4 高级变量操作 Makefile 支持高级的变量操作,包括字符串操作、条件赋值、变量展开等。...声明:本作品采用署名-非商业性使用-相同方式共享 4.0 国际 (CC BY-NC-SA 4.0)[1]进行许可,使用时请注明出处。

    24420

    Linux学习笔记(二)、常用指令(下)

    3、Makefile变量 Makefile支持变量Makefile支持的变量都是字符串,变量的定义引用: objects = main.o input.o calcu.o //objects...=”Verilog代码中assign类似,类似于C中的NULL,当变量为NULL时候进行=后面的赋值,否则不进行赋值,即维持原值。...自动化变量模式中所定义的一系列的文件自动的逐个取出,直到所有的符合模式的文件都取完,自动化变量只应该出现在规则的命令中。 ? ? 最终makefile变为: ?...也没搞懂什么意思,反正我试了试,的确在同一目录下创建一个指令同名的文件,Makefile中的指令执行不了。...8.1 ifeq、ifneq用法 ? 8.2 ifdef、ifndef用法 ifndef 8.3 Makefile函数使用 Makefile支持函数,不支持自定义函数。

    2.4K21

    Makefile总结

    make是一个解释Makefile指令的命令工具,常见的IDE都集成了这个工具。...规则 目标文件:依赖文件 [Tab]系统指令1 (注意:系统指令前必须有tab) 示例 例如现有main.cpp test.cpp test.h三个文件,用Makefile实现增量编译(当其中有一个文件变化时...main.cpp -o main.o test.o: test.cpp test.h $(CC) -c test.cpp -o test.o clean: rm $(OBJ) $(BIN) 特殊变量...: $@ 目标文件 $^ 依赖项列表 $< 依赖项列表第一项 通过make -p可以查看很多自定义的变量,如CC(默认值为cc),RM(默认值为rm -f) 可对上述的Makefile进行修改: CC...在调用子目录Makefile,有时我们需要传递参数,两种方法: 方法一: 在上层Makefile中使用”export”关键字对要传递的变量进行声明。

    96110

    Javap -c 字节码解析

    栈和局部变量操作 常量压入栈的指令 aconst_null         null对象引用压入栈 iconst_m1         int类型常量-1压入栈 iconst_0        ...int类型常量0压入栈 iconst_1         int类型常量1压入栈 iconst_2         int类型常量2压入栈 iconst_3         int类型常量3压入栈...lneg             对一个long类型值进行取反操作 iinc             把一个常量值加到一个int类型的局部变量上 逻辑运算 移位操作 ishl            ...“逻辑”操作 land             对long类型值进行“逻辑”操作 ior             对int类型值进行“逻辑或”操作 lor             对long类型值进行...NaN时,返回1) dcmpl             比较double类型值(当遇到NaN时,返回-1) dcmpg             比较double类型值(当遇到NaN时,返回1) 无条件转移指令

    69460

    java指令

    1.栈和局部变量操作 ,常量压入栈的指令 aconst_null null对象引用压入栈 iconst_m1 int类型常量-1压入栈 iconst_0 int类型常量0压入栈...iconst_1 int类型常量1压入栈 iconst_2 int类型常量2压入栈 iconst_3 int类型常量3压入栈 iconst_4 int类型常量4压入栈 iconst...lneg 对一个long类型值进行取反操作 iinc 把一个常量值加到一个int类型的局部变量上 8.逻辑运算 移位操作 ishl 执行int类型的向左移位操作 lshl 执行long...“逻辑”操作 land 对long类型值进行“逻辑”操作 ior 对int类型值进行“逻辑或”操作 lor 对long类型值进行“逻辑或”操作 ixor 对int类型值进行“逻辑异或...(当遇到NaN时,返回-1) dcmpg 比较double类型值(当遇到NaN时,返回1) 无条件转移指令 goto 无条件跳转 goto_w 无条件跳转(宽索引) 表跳转指令

    40410

    JVM指令手册

    栈和局部变量操作 常量压入栈的指令 aconst_null null对象引用压入栈 iconst_m1 int类型常量-1压入栈 iconst_0 int类型常量0压入栈 iconst_1 int...(使用宽索引) ldc2_w 把常量池中long类型或者double类型的项压入栈(使用宽索引) 从栈中的局部变量中装载值的指令 iload 从局部变量中装载int类型值 lload 从局部变量中装载long...“逻辑”操作 land 对long类型值进行“逻辑”操作 ior 对int类型值进行“逻辑或”操作 lor 对long类型值进行“逻辑或”操作 ixor 对int类型值进行“逻辑异或”操作 lxor...anewarray 分配数据成员类型为引用类型的新数组 arraylength 获取数组长度 multianewarray 分配新的多维数组 控制流 条件分支指令 ifeq 如果等于0,则跳转 ifne...时,返回-1) dcmpg 比较double类型值(当遇到NaN时,返回1) 无条件转移指令 goto 无条件跳转 goto_w 无条件跳转(宽索引) 表跳转指令 tableswitch 通过索引访问跳转表

    1.2K51

    芯片设计中的Makefile简明教程

    默认目标 如果我们只是敲make(后面不跟目标),那么调用Makefile里的第一个目标。那么我们为了防止出错通常把第一个目标定义成all(执行完整的流程)或者help(显示帮助菜单)。...内定义变量 当源文件比较多,且常需要增减,我们可以把依赖定义成一个变量,放成文件开头,如下。...在Makefile中有几个特殊变量,如$@表示目标,$^表示依赖。...Makefile的引用复用 最后还有一点,我们也会经常遇到,把共用的Makefile脚本写到common.mk,然后再include common.mk,这样可以让Makefile看起来更简洁。...当然也可以像这个示例一样,先获取项目根目录,然后再用变量来引用路径。这样比较易于移植。 IC Flow的联系 到这里,学了这么多,你已经可以写一些复杂的Makefile了。

    1.9K50

    jvm指令

    跳转到class文件目录,使用 javap -c StringTest.class -> p.txt 1 命令编译后的文件输出到p.txt文件 栈和局部变量操作 常量压入栈的指令 aconst_null...lneg 对一个long类型值进行取反操作 iinc 把一个常量值加到一个int类型的局部变量上 逻辑运算 移位操作 ishl 执行int类型的向左移位操作 lshl 执行long类型的向左移位操作...“逻辑”操作 land 对long类型值进行“逻辑”操作 ior 对int类型值进行“逻辑或”操作 lor 对long类型值进行“逻辑或”操作 ixor 对int类型值进行“逻辑异或”操作 lxor...anewarray 分配数据成员类型为引用类型的新数组 arraylength 获取数组长度 multianewarray 分配新的多维数组 控制流 条件分支指令 ifeq 如果等于0,则跳转 ifne...时,返回-1) dcmpg 比较double类型值(当遇到NaN时,返回1) 无条件转移指令 goto 无条件跳转 goto_w 无条件跳转(宽索引) 表跳转指令 tableswitch 通过索引访问跳转表

    35020

    【手把手系列】:芯片设计中的Makefile简明教程

    默认目标 如果我们只是敲make(后面不跟目标),那么调用Makefile里的第一个目标。那么我们为了防止出错通常把第一个目标定义成all(执行完整的流程)或者help(显示帮助菜单)。...内定义变量 当源文件比较多,且常需要增减,我们可以把依赖定义成一个变量,放成文件开头,如下。...在Makefile中有几个特殊变量,如@表示目标,^表示依赖。...其实Makefile允许从命令行提供额外的变量,格式为OPTION=value。...Makefile的引用复用 最后还有一点,我们也会经常遇到,把共用的Makefile脚本写到common.mk,然后再include common.mk,这样可以让Makefile看起来更简洁。

    1.8K40

    Linux中Makefile文件详解

    TARGET: 目标文件的变量,这里定义了最终生成的可执行文件的名字。 SRCS: 源文件的变量,这里列出了所有的源文件。 OBJS: 中间文件的变量,这里源文件的后缀由 .c 替换为 .o。...自动变量 Makefile 中有一些特殊变量,称为自动变量,它们在规则的命令中使用,表示一些特定的信息。一些常用的自动变量有: $@: 表示目标文件的名字。...9. include 指令 Makefile 可以包含其他 Makefile,使用 include 指令。这样可以 Makefile 分成多个模块,提高可维护性。...# 自动生成依赖关系 %.d: %.c $(CC) -M $ $@ 17. include 指令 使用 include 指令可以将其他 Makefile 文件包含进当前 Makefile...注意到这个 Makefile 中的变量和规则可以根据项目的结构和需求进行适当的调整。 23. 安装规则 Makefile 可以包含安装规则,用于将可执行文件、库文件等安装到指定位置。

    89210

    Linux笔记(9)| 一步步深入Makefile

    mp3.o: gcc -c mp3.c -o mp3.o .PHONY:clean clean: rm mp3 2、Makefile中的变量:系统变量、自定义变量、自动化变量 (1)...系统变量: (2)自定义变量: = 延迟赋值 := 立即赋值 ?...(3)自动化变量 $< 第一个依赖文件 $^ 全部的依赖文件 $@ 目标 使用自动化变量可以使Makefile文件更好地修改,类似于C语言中使用宏定义来封装,比如前面写的Makefile进行改造 cc...,所以,可以把上面的.o.c的依赖去掉, 这样,Makefile进一步改造成这样: cc=gcc target=mp3 objs=main.o mp3.o $(target):$(objs)...从提示信息可以看出,它先创建了一个build文件夹,然后main.c编译成了main.o,mp3.c编译成了mp3.o,都放在build文件夹下面,最后两个.o文件生成最终的可执行目标mp3。

    87150

    Redis源码解析——前言

    除了一些高大上的技术,我们一般人都能用比较简单的方式描述它是干什么的。比如Redis,它不就是一个可以通过网络访问的KV型数据库嘛。...在没有源码的情况下,可以想象出它应该是通过网络服务、指令解析、特殊的内存结构设计(方便增删改查)、持久化等技术构成。然后我们在战术上要重视它各个技术的实现,特别是一些我们没想到的一些技术。...剩下的一些未知文件可能就是我们在预估这个工程构成时没有考虑到的,它们往往隐藏了一些特殊功能。         然后,我会选择阅读Makefile文件,看看它是由哪些文件编译生成,以及它依赖的一些技术。...然后我们关注下Makefile文件 # Top level makefile, the real shit is at src/Makefile default: all .DEFAULT: cd...之后的代码我采用深度优先的方法去阅读,但是这种方式是需要在一条主线的基础之上进行的。这样就会导致主线的逻辑被打的很零散。所以我决定还是要分章节,从最基础的一些代码开始分析。

    71520

    JVM Specification notes 1 -Jvm Structure

    寄存器,保存Java虚拟机正在执行的字节码指令的地址 Java 虚拟机栈 栈线程同时创建,存储局部变量一些过程结果的地方 Java堆 可供各条线程共享的运行时内存区域,也是供所有类实例和数组对象分配内存的区域...Java虚拟机提供一些字节码指令来从局部变量表或者对象实例的字段中复制常量变量值到操作数栈中,也提供了一些指令用于从操作数栈取走数据、操作数据和把操作结果重新入栈。...xload 从局部变量加载到操作数栈 xstore 从操作数栈存储到局部变量表 xpush,xdc,xconst 一个常量加载到操作数栈 wide 扩充局部变量表的访问索引...类型转换指令 两种Java虚拟机数值类型进行相互转换 宽化类型转换 小范围类型向大范围类型的安全转换,无需显式的转换指令 窄化类型转换 (i2b,i2c,i2s,l2i,f2i,f2l,d2i...:arraylenth 检查类实例类型的指令:instanceof,checkcast 控制转移指令 条件分支 ifeq,iflt,ifle,ifne,ifgt,ifge,ifnull,ifnonnull

    84470

    走进 JDK 之 Boolean

    = null) && s.equalsIgnoreCase("true")); } 直接和字符串 true 进行比较。...0: iconst_1 // 一个 int 常量 1 加载到操作数栈 1: istore_1 // 数值 1 从操作数栈存储到局部变量表 2: iload_1 // 局部变量...3: ifeq 14 ... 14: return ifeq 是控制转移指令,这里的含义是如果操作数栈上的值是 0, 就跳转到 14 处,14 处指令为 return,则结束方法执行...如果每一种数据结构都要得到 Java 虚拟机的字节码指令的支持的话,那么指令的数量远远超过 256 种。所以,这也给指令集的设计带来了麻烦。最终权衡的结果就是,只对有限的类型提供完整的指令。...true 表示 1,false 表示 0 JVM 为 int 提供了完善的操作码,boolean 、byte 、char 、short 在编译期或运行期都会被转换为 int,使用 int 类型的字节码指令进行处理

    77020
    领券