[makefile]5_条件判断_循环_自定义函数

1.Makefile中的条件判断

(1)ifeq/ifneq、ifdef/ifndef
  • ifeq 判断是否相等,相等返回true,不相等返回false
  • ifneq 判断是否不相等,相等返回 true,不相等返回 false
  • ifdef判断变量是否存在,存在返回true,不存在返回false
  • Ifndef判断变量是否不存在,不存在返回true,存在返回false
(2)没有elseif的用法,如果要实现elseif,就要写嵌套。
(3)示例
A:=123
RS1:=
RS2:=
RS3:=
RS4:=
ifeq ($(A),123)
    RS1:=123
else    
    ifeq ($(A),321)
        RS1:=321
    else
        RS1:=no-123-321
    endif
endif
ifdef A
    RS3=yes
else
    RS3:=no
endif
ifndef FLAG
    FLAG:=default-flag
endif
all:
    echo $(RS1)
    echo $(RS3)
    echo flag=$(FLAG)
(4)命令行传参
make FLAG=123 -f Makefile //如果有 Makefile,则可写成 make FLAG=123

2.循环

(1)Makefile 有两种循环方式:for、foreach
(2)for
# 非常注意, 命令后面的分号必不可少, 比如cmd1; cmd2;
for item in $(value_list); do cmd1; cmd 2; done
for item in $(value_list); do \
    cmd1; \
    cmd2; \
    cmdn; \
done
(3)foreach
#注意:有$(),逗号和分号
$(foreach item, $(value_list), cmd 1; cmd 2;)
$(foreach item, $(value_list) \
    cmd1; \
    cmd2; \
    cmdn; \
)
(4)两种循环的差异
  • 对循环变量上的引用, for使用$$, foreach使用$;
  • 对于函数的支持, for循环无法支持函数运算;
(5)示例1
list = one two three four
###################################################
# for循环格式
# 注意,此处回声消除要写在for处, 写在echo处报错
# 可写在一行, 也可写在多行(此时需用续行符'\')
###################################################
test1:
    @for item in $(list); do \
        echo '***> ' $$item; \
    done
    @for var in $(list); do echo '---> ' $$var; done
###################################################
# foreach循环格式
###################################################
test2:
    @$(foreach x, $(list),\
        echo '===> ' $x; \            
    )
    @$(foreach x, $(list), echo '@@@> ' $x;)  # 此处分号至关重要
(6)示例2
#可以在循环中逐个的修改值
TARGET:=a b c d
FILE:=$(foreach v, $(TARGET),$v.txt)
all:
    #echo $(TARGET)
    #echo $(foreach v, $(TARGET),$v)
    #touch $(TARGET)
    #touch $(foreach v, $(TARGET),$v.txt) 
    #mkdir $(foreach v, $(TARGET),$v_txt) 
    echo $(FILE)
    for v in $(TARGET);do touch $$v.txt; done;
clean:
    $(RM) -rf $(TARGET) *txt

3.自定义函数,不是真正的函数,本质上是多行命令放在了外面。没有返回值。

4.代码示例

A:=123

B:=$(A)

define FUNC1

    #自己的函数名

    echo $(0)  

    #传参      

    echo $(1) $(2)

    echo func1 

    echo $CA) $(B) 

endef

A:=456 

all:

    $(call FUNC1,abc,def)

    echo $(A)

A:=789

3.示例

打印A的是最终值。

5.示例

LS1=$(call FUNC3) #用:=会打印不出来LS1

define FUNC3 

    echo $(shell ls)

    $(RM) abcd 

endef

LS2:=$(call FUNC3)

define FUNC2 

    return 123 

endef

default:

    #echo $(call FUNC2)

    #echo retrun 123

    $(call FUNC3)

    $(LS2)

    $(LS1)

6.报错,echo 是空的

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
QNX是一种实时操作系统,用于嵌入式系统开发。在QNX中编写Makefile是一种管理和构建工程的常用方式。以下是关于如何编写QNX Makefile的简要解释。 首先,Makefile是一个文本文件,其扩展名为".mk"或"Makefile"。QNX Makefile由一系列规则组成,每个规则指定了目标(target)以及其依赖项(dependencies)和执行的命令(commands)。 在QNX Makefile中,常见的规则包括: 1. 默认规则:指定默认目标,当运行"make"命令时,将执行该目标。 2. 显式规则:指定目标及其依赖项和所需的命令。例如: ```makefile target: dependency1 dependency2 commands ``` 3. 隐式规则:通过文件扩展名来推断目标及其依赖项,以及所需的命令。 4. 变量:用于存储和传递值。可以使用内置变量,也可以自定义变量。例如: ```makefile OBJ_FILES = file1.o file2.o ``` 5. 函数:用于执行一些预定义的操作,例如文件的复制和删除。 6. 伪目标(Phony Target):指定一些不涉及文件生成的目标。例如: ```makefile .PHONY: clean clean: rm *.o ``` QNX Makefile还可以包含条件语句(如if-else语句)、循环语句(如for和while循环)以及其他一些复杂的结构,用于根据特定条件执行不同的命令或规则。 通过编写合适的规则和命令,可以使用QNX Makefile来构建和管理QNX项目的编译、链接和部署等工作。 总结而言,QNX Makefile是一种定义和管理QNX项目构建过程的文件,它包含目标、依赖项和执行的命令。通过合理使用Makefile,可以实现自动化构建和管理嵌入式系统的开发工作。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值