makefile if 使用

1、在目标外使用if

#这个ifeq else endif,在target 外部,关键字前边一定要有tab
    ifeq ("aaa","bbb")
#内容前可以有空格,如果是tab时,解析为命令
#变量前可以多个空格
  LIBS= -laaa
    else
#+echo "test"
  LIBS= -lbbb
    endif

2、在目标内使用if

a、情形一:shell 方式

#make预处理时,所有以$开头的,它都不会放过。要想引用Shell自己的变量,应该以$$开头。另外要注意,Shell自己的变量是不需要括号
#make把每一行Shell脚本当作一个独立的单元,它们在单独的进程中运行。里边定义的变量,只能在局部使用
    @if [ "debug" = "debug" ]; \
    then \
TV3=test3_yes;\
echo $$TV3; \
echo $(TV3); \
    else \
TV3=test3_no;\
    fi

b、情形二:makefile方式

#这个ifeq else endif,在target 内部,关键字前边一定没有tab,否则当命令处理。可以有多个空格
#在内部时,endif后边不能执行任务语句
ifeq ("aaa","bbb")
    @echo ccccc
LIBS2= -laaa
#   @echo $(LIBS2)
  else
    @echo bbbba
LIBS2= -lbbb
#   @echo $(LIBS2)
  endif

3、测试 makefile

#是否相等
#ifeq (ARG1, ARG2)
#ifeq 'ARG1' 'ARG2'
#ifeq "ARG1" "ARG2"
#ifeq "ARG1" 'ARG2'
#ifeq 'ARG1' "ARG2"

#是否不相等
#ifneq




TV1=aaa
TV2=aaa
TV3=tv3
LIBS=
LIBS2=
#这个ifeq else endif,在target 外部,关键字前边一定要有tab
#这个ifeq else endif,在target 内部,关键字前边一定没有tab,否则当命令处理
    ifeq ("aaa","bbb")
#内容前可以有空格,如果是tab时,解析为命令
#   +echo "test"
  LIBS= -laaa
    else
#+echo "test"
  LIBS= -lbbb
    endif

KVAL=start


#makefile变量只能在target外部定义和修改
all:

#如果不添加@,结果也出出,但是语句本身也会打印出来
    echo $(KVAL)
    @echo $(LIBS)
#Shell脚本在target里才有效,其它地方都被忽略掉了。target 外可以用$(shell 语句)方式
#make把每一行Shell脚本当作一个独立的单元,它们在单独的进程中运行。里边定义的变量,只能在局部使用
    @if [ "debug" = "debug" ]; then  echo "build debug"; else echo "build release"; fi


#make预处理时,所有以$开头的,它都不会放过。要想引用Shell自己的变量,应该以$$开头。另外要注意,Shell自己的变量是不需要括号
#在Makefile中执行shell命令,一行创建一个进程来执行。这也是为什么很多Makefile中有很多行的末尾都是“;  \”,以此来保证代码是一行而不是多行,这样Makefile可以在一个进程中执行
    @for i in 1 2 3; \
    do \
    echo "building " $$i; \
    done
    @echo "finall"


#make把每一行Shell脚本当作一个独立的单元,它们在单独的进程中运行。里边定义的变量,只能在局部使用
    @if [ "debug" = "debug" ]; \
    then \
TV3=test3_yes;\
echo $$TV3; \
echo $(TV3); \
    else \
TV3=test3_no;\
    fi
    @echo $(TV3)

#这个ifeq else endif,在target 外部,关键字前边一定要有tab  
#这个ifeq else endif,在target 内部,关键字前边一定没有tab,否则当命令处理
#在内部时,endif后边不能执行任务语句
ifeq ("aaa","bbb")
    @echo ccccc
LIBS2= -laaa
#   @echo $(LIBS2)
  else
    @echo bbbba
LIBS2= -lbbb
#   @echo $(LIBS2)
  endif

  ifeq ("aaa","bbb")
#   @echo ccccc
LIBS2= -laaa
  else
#   @echo bbbb
LIBS2= -lbbbc
  endif

#   @echo "finall"
  • 3
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Brickie-liu

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值